赞
踩
Halcon 提供了几种阈值分割的算子,比如:
threshold(Image, filteredRegion,5, 255)
图像中,所有满足5<=grayValue<=255的像素,都会被输出成region。
这样对于背景光照比较均匀的项目来说,效果不错,假设背景亮度本身存在一定的差异,
那么就需要用到dyn_threshold算子来进行处理。
dyn_threshold(OrigImage,ThresholdImage : RegionDynThresh :Offset,LightDark : )
a. OrigImage 原图像
b. ThresholdImage 参考阈值图像
c. RegionDynThresh 输出的Region,也就是我们想要的结果
d. Offset 阈值大小
e . LightDark 根据特征进行选择,如果目标特征的灰度值较小,选择"dark", 反之选择"light"
对比threashold, 最根本的区别就是加入了参考阈值图像, 也就是说,每个像素的阈值分割,有参考阈值和Offse这个固定阈值来决定:
The condition for LightDark = 'light' is:g_o>=g_t+offset ,light就提取相对参考图更亮的区域。
For LightDark='dark' ,the conditon is: g_o<=g_t-offset ,dark就提取相对参考图更暗的区域
For LightDark='equal',g_t-offset<=g_o<=g_t+offset,选取和参考图差不多的区域。
使用这个算子的大概流程如下:
1. 获取ROI。如果图片中不包含无关信息,请跳过此步骤。
通过模板匹配等方法,定位到需要处理的Region,通过ReduceDomain先拿到ROI图像。
2. MeanImage 获取参考阈值图像
比如 mean_image(ProcImage, ProcMeanImage, 15, 15)
会用15*15的卷积核,对原图像进行加权平均,卷积核的尺寸越大,图像越模糊。
参考Halcon文档的解释:
Withdyn_threshold, contours of an object can be extracted, where the objects' size (diameter) is determined by the mask size of the lowpass filter and the amplitude of the objects' edges.
我的理解: (一). 卷积核尺寸越大,对应的低通滤波器的截止频率越低,图像的低频成分越多。
(二). 由检测对象的的对比度决定卷积窗的大小,如果对比度较小,意味着检测对象本身的频率较低,需要用更低频的滤波器来做阈值分割(dyn_threashold), 意味着选择的卷积窗大小相对较大; 如果对比度较大,以为者检测对象本身的属于较高频的信号, 此时,卷积窗尺寸可以相对较小。
具体选择多大的卷积窗,参考文档给出的解释:
The larger the mask size is chosen, the larger the found regions become. As a rule of thumb, the mask size shouldbe about twice the diameter of the objects to be extracted.
根据经验,卷积核尺寸通常为两倍检测对象直径。
3. DynThreshold 动态阈值分割
前期的准备好以后,就用此方法进行动态阈值分割
比如: dyn_threshold (ProcImage, ProcMeanImage, ProcDarkPixels, 22, 'dark')
4. 后期优化
当然,如果在同一幅图中,需要检测的对象的尺寸相差较大,可将检测对象的尺寸划分成几档,对于这几档,选择不同的卷积核尺寸,将2~3步进行重复。比如检测对象的像素尺寸为100, 50, 20,就选择201*201,101*101,41*41的卷积窗,将三次过滤的输出区域,取并集,这样就尽可能的筛选出我们想要的结果。
如有遗漏或不正确的知识点,还请提出宝贵建议,感谢!
参考博客:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。