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个新元组;

拓展

相关推荐
YJlio4 小时前
ShareEnum 学习笔记(9.5):内网共享体检——开放共享、匿名访问与权限风险
大数据·笔记·学习
泽虞5 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
FakeOccupational5 小时前
电路笔记(信号):网线能传多少米?网线信号传输距离
开发语言·笔记·php
Yawesh_best15 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
AndrewHZ15 小时前
【图像处理基石】如何在图像中提取出基本形状,比如圆形,椭圆,方形等等?
图像处理·python·算法·计算机视觉·cv·形状提取
Ccjf酷儿17 小时前
操作系统 蒋炎岩 3.硬件视角的操作系统
笔记
习习.y17 小时前
python笔记梳理以及一些题目整理
开发语言·笔记·python
在逃热干面18 小时前
(笔记)自定义 systemd 服务
笔记
DKPT19 小时前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
QT 小鲜肉20 小时前
【孙子兵法之上篇】001. 孙子兵法·计篇
笔记·读书·孙子兵法