Halcon 机器视觉案例 之 药剂液面高度测量

第二篇 机器视觉案例 之 药剂液面高度测量

文章目录

  • [第二篇 机器视觉案例 之 药剂液面高度测量](#第二篇 机器视觉案例 之 药剂液面高度测量)
    • 1.案例要求
    • 2.实现思路
      • 2.1获得液面的位置:
        • [2.1.1 获得每支药剂的位置坐标](#2.1.1 获得每支药剂的位置坐标)
        • [2.1.2 根据药剂的横坐标设置卡尺工具助手找到每一个液面的位置](#2.1.2 根据药剂的横坐标设置卡尺工具助手找到每一个液面的位置)
      • [2.2 获得基准线的位置:](#2.2 获得基准线的位置:)
      • [2.3 导入点与线测得距离](#2.3 导入点与线测得距离)
      • [2.4 显示测量结果](#2.4 显示测量结果)
    • 3.实现效果
    • [4. 算子](#4. 算子)
    • 拓展

1.案例要求

  • 测量每一支药剂的液面高度

2.实现思路

  • 测量液面高度需要获得药剂液面的位置与一条基准线,通过测量点到线距离公式可以测得液面的高度

2.1获得液面的位置:

2.1.1 获得每支药剂的位置坐标
  • 对图像进行预处理操作,使得液面的特征更加明显,便于模板查找、

    • 均衡操作可以增加图像的对比度,使图像的柱状线性化
    • 使用算子 equ_histo_image (Image, ImageEquHisto)
    • 均衡后的图像:
  • 画一个区域并根据区域创建模板

    • 创建区域
      • gen_rectangle1 (Rectangle, 218, 281, 312, 328)
    • 裁剪区域
      • reduce_domain (ImageEquHisto, Rectangle, ImageReduced)
    • 创建模板
      • create_shape_model (ImageReduced, 'auto', rad(-45), rad(45), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
  • 查找模板并获得模板结果,在模板结果中获取匹配个数以及坐标

    • 查找模板
      • find_shape_model (ImageEquHisto1, ModelID, rad(-45), rad(40), 0.5, 0, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
    • 获得模板匹配结果
      • dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)
        tuple_length (Row, Length)
    • 获得匹配个数(根据坐标数组长度)
      • tuple_length (Row, Length)
2.1.2 根据药剂的横坐标设置卡尺工具助手找到每一个液面的位置
  • 创建一个卡尺助手
  • 画线 ------ 给卡尺设置长度
  • 设置边缘幅度
  • 设置卡尺的参数

  • 插入代码
  • 设置卡尺的横坐标
  • 卡尺检测结果
    • measure_pos (Image, MsrHandle_Measure_02_0, 1, AmplitudeThreshold, 'all', 'first', Row_Measure_02_0, Column_Measure_02_0, Amplitude_Measure_02_0, Distance_Measure_02_0)
    • 获得液面坐标
    • (Row_Measure_02_0, Column_Measure_02_0)

2.2 获得基准线的位置:

  • 画线算子
    • draw_line (WindowHandle, Row1, Column1, Row2, Column2)
    • 获得坐标后设置固定值
      • gen_region_line (RegionLines, 301, -4.5, 297, 632.5)

2.3 导入点与线测得距离

  • distance_pl (Row_Measure_02_0, Column_Measure_02_0, 301, -4.5, 297, 632.5, Distance)

2.4 显示测量结果

  • 将每一个药剂测量的结果与坐标拼接成数组
    • tuple_concat (distances, distance, distances)
    • tuple_concat (rows, Row_Measure_02_0-10, rows)
    • tuple_concat (columns, Column_Measure_02_0-30, columns)
  • 设置字体格式以及输出字
    • set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
    • disp_message (WindowHandle, distances, 'window',rows, columns, 'red', 'false')

3.实现效果

4. 算子

  • 创建一个匹配轮廓模型
    • create_shape_model(Template::NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast,MinContrast:ModelID)
    • 参数
      • Template:输入的图像模板名称; 用来产生模型的图像;
      • NumLevels:最大的金字塔(分析法)层数,
      • AngleExtent:输入匹配时的角度范围;
      • AngleStep:输入匹配旋转角度的步长
      • Optimization:设置模板优化和模板创建方法
      • Metric:设置匹配方法
      • Contras:设置对比度
      • MinContrast:输入图像中匹配物体的最小差别(对比度)
      • ModelID:输出模型句柄;
  • 在一个图像中找出一个最佳匹配轮廓
    • find_shape_model(Image::ModelID, AngleStart, AngleExtent,MinScore, NumMatches, MaxOverlap, SubPixel,NumLevels, Greediness: Row, Column, Angle, Score)
    • 参数
      • Image:输入匹配模型的图像 (byte/uint2) ;
      • ModelID:输入模型句柄;
      • AngleStart:输入匹配时的起始角度;
      • AngleExtent:输入匹配时的角度范围;
      • MinScore:输入最小的匹配值(匹配质量) , 考虑到模板的一半被遮挡, 默认0.5
      • NumMatches:在图像上找到模板的最大个数,默认1个
      • MaxOverlap :定义了找到的两个目标区域最多重叠的系数
      • MaxOverla p=1, 所有找到的目标区域都要返回。
      • SubPixel :确定找到的目标是否使用亚像素精度提取
      • NumLevels:搜索时使用的金字塔层数
      • Greediness 搜索时的"贪婪程度
      • Row:输出目标外形轮廓的y值坐标(轮廓中心位置) ;
      • Column:输出目标外形轮廓的x坐标(轮廓中心位置) ;
      • Angle:输出目标物体模型旋转后对应的角度;
      • ScaleR:输出y值方向的比例大小;
      • ScaleC:输出x值方向的比例大小;
      • Score:输出目标物体的匹配值;
  • 均衡图像,图像的柱状线性化
    • equ_histo_image(Image:ImageEquHisto:😃
    • 参数:
      • Image :输入多通道图像 (byte/uint2);
      • ImageEquHisto: 输出图像的柱状线性化图像 (byte/uint2);
  • 合并两个元组
    • tuple_concat(::T1, T2: Concat)
    • 参数
      • T1:输入元组1;
      • T2:输入元组2;
      • Concat:合并两个元组为1个新元组;

拓展

相关推荐
笑鸿的学习笔记3 小时前
虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系
笔记·ue5·虚幻
半新半旧6 小时前
mongodb 学习笔记
笔记·学习·mongodb
小言Ai工具箱8 小时前
PuLID:高效的图像变脸,可以通过文本提示编辑图像,通过指令修改人物属性,个性化文本到图像生成模型,支持AI变脸!艺术创作、虚拟形象定制以及影视制作
图像处理·人工智能·计算机视觉
TextIn智能文档云平台8 小时前
PDF文档解析新突破:图表识别、公式还原、手写字体处理,让AI真正读懂复杂文档!
图像处理·人工智能·算法·自然语言处理·pdf·ocr
wangbaowo11 小时前
MySQL数据库下篇
数据库·经验分享·笔记·学习·mysql·安全
chennalC#c.h.JA Ptho11 小时前
生成了一个AI算法
经验分享·笔记·aigc
麻雀无能为力11 小时前
C++自学笔记 makefile
笔记
五花肉村长12 小时前
Linux-Ext系列文件系统
linux·运维·服务器·c++·笔记·visual studio
麦田里的稻草人w13 小时前
拍摄学习笔记【前期】(一)曝光
笔记·学习
C++ 老炮儿的技术栈13 小时前
C++中什么是函数指针?
c语言·c++·笔记·学习·算法