工控编程吧

标题: halcon dyn_threshold函数介绍 [打印本页]

作者: qq263946146    时间: 2019-5-29 19:09
标题: halcon dyn_threshold函数介绍
dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )
dyn_threshold从输入图像中选择像素满足阈值条件的区域。
设g_{o} = g_{OrigImage}, g_{t} = g_{threshold oldimage}。


那么LightDark = 'light'的条件是:
g0>=gt+Offset

LightDark = 'dark',条件是:
g0<=gt-Offset


LightDark = 'equal'
gt-Offset<=g0<=gt+Offset


LightDark = 'not_equal'
gt-Offset>g0  或 g0  >gt+Offset

通常,阈值图像是原始图像的平滑版本
(例如,通过应用mean_image、binomial_filter、gauss_filter等)。
然后dyn_threshold的效果类似于将 threshold应用于原始图像的高通滤波版本(参见highpass_image)。


使用dyn_threshold可以提取出物体的轮廓,
其中物体的大小(直径)由低通滤波器的掩模大小和物体边缘的振幅决定:


选择的掩码大小越大,发现的区域就越大。
根据经验,掩模的大小应该是要提取的对象直径的两倍左右。
重要的是不要将参数Offset设置为零,因为在这种情况下会发现太多的小区域(噪声)。
值在5到40之间是一个有用的选择。
选择的Offset越大,提取的区域就越小。


满足上述条件的输入图像的所有点都存储在一个区域中。
如有必要,可通过调用 connection获得所连接的组件。


如果Offset选择从-1到1,通常会生成一个非常嘈杂的区域,需要很大的存储空间。
如果偏移量选择太大(例如,> 60),可能会出现没有点满足阈值条件(即,则返回一个空区域)。
如果偏移量选择得太小(例如< -60),可能会发生所有点都满足阈值条件(即,则返回完整的区域)。


例程:
read_image (Image, 'photometric_stereo/embossed_01')
get_image_size (Image, Width, Height)
dev_get_window (WindowHandle)
if (WindowHandle >= 0)
  dev_resize_window_fit_image (Image, 0, 0, -1, -1)
else
  dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
endif
dev_display (Image)
stop ()
*在图像上使用强均值滤波器来模糊盲文点
mean_image (Image, ImageMean, 59, 59)
*将原始图像与模糊图像进行比较,确定两个图像的灰度值相差超过15的区域
dyn_threshold (Image, ImageMean, RegionDynThresh, 15, 'not_equal')
* 对结果区域进行持续处理
closing_circle (RegionDynThresh, RegionClosing, 8.5)
opening_circle (RegionClosing, RegionOpening, 6.5)
connection (RegionOpening, ConnectedRegions)
smallest_circle (ConnectedRegions, Row, Column, Radius)
gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1)
* 盲文点提取结果显示
dev_display (Image)
dev_set_color ('green')
dev_display (ContCircle)

例程执行结果:
(, 下载次数: 1)