Halcon例程学习(2)—— Particle

​ 其为分析液体中的成分,得出区域中的平均灰度和面积;

  1. 在液体二值图像中有几个亮斑,需要提前去除;

  2. 液体成分中灰度变化不明显,直接采用全局阈值处理效果不佳;

  3. 读取鼠标按键数值,并选择区域。

    #Halcon例程学习(2)—— Particle

    threshold (Image, Large, 110, 255)
    * Dilate regions with a circular structuring element
    dilation_circle (Large, LargeDilation, 7.5)
    

    ​ 在初始化之后,采用全局阈值处理,选择较亮的区域。在选择了亮区域后进行了膨胀操作,扩大了其范围,更好的进一步去除了亮色区域。

#Halcon例程学习(2)—— Particle

complement (LargeDilation, NotLarge)
reduce_domain (Image, NotLarge, ParticlesRed)

​ 通过取补集从整张图像中裁剪出没有亮色区域的部分。


​ 从这里思考为什么不采用crop_domain, 从上一篇我们采用的 crop_part 为裁剪区域想起。

​ reduce_domain为获取特定区域Region位置的图像。但新获取的图像大小并没有发生变化,与原图像相同。

​ 而crop_domain输出最小外接正矩形的图像,即指图像中有值的部分以外接正矩形的方式输出。

crop_part(Image : ImagePart : Row, Column, Width, Height : )是输出指定位置的矩形区域的图像。


mean_image (ParticlesRed, Mean, 31, 31)
* Segment the image using a local threshold
dyn_threshold (ParticlesRed, Mean, SmallRaw, 3, 'light')
opening_circle (SmallRaw, Small, 2.5)
connection (Small, SmallConnection)

​ 动态阈值分割之前采用图像平滑操作,之后的图片存在一些噪声点,使用开操作去除较小的噪声点,

#Halcon例程学习(2)—— Particle
#Halcon例程学习(2)—— Particle
​ 在获取成分图像后,首先定义按键值为1,设置一个while循环,当按键值不是1的时候跳出循环。使用get_mbutton (WindowID, Row, Column, Button)获取当前的鼠标左键点击的位置,选择我们所选的位置的区域select_region_point (SmallConnection, SmallSingle, Row, Column),并使用count_obj (SmallSingle, NumSingle)确保我们选中的为一个区域(当然在本例程中都是单个区域,即使将if(NumSingle == 1 )注释掉依旧能够正常运行)。

相关文章: