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

拓展

相关推荐
明月清了个风1 小时前
数据结构与算法学习笔记----Floyd算法
笔记·学习·算法
cloud___fly3 小时前
黑马Redis数据结构学习笔记
数据结构·redis·笔记·学习
我叫啥都行5 小时前
计算机基础知识复习12.20
java·jvm·笔记·后端·sql
羊村懒哥5 小时前
nginx-虚拟主机配置笔记
服务器·笔记
LuH11246 小时前
【论文阅读笔记】HunyuanVideo: A Systematic Framework For Large Video Generative Models
论文阅读·笔记
小负不负6 小时前
解决ubuntu22.04常见问题
笔记
小麦加油呀7 小时前
一款轻量级的开源笔记服务软件
笔记·开源
星野`8 小时前
MySQL基础笔记(三)
笔记·mysql
柔弱女子爱java9 小时前
spring专题笔记(五):依赖注入--p命名空间注入、c命名空间注入、util命名空间
java·笔记·后端·spring·架构·系统架构