工控编程吧
标题: 工业视觉halcon mean_image函数介绍 [打印本页]
作者: qq263946146 时间: 2019-6-22 20:21
标题: 工业视觉halcon mean_image函数介绍
平滑滤波器用于抑制图像噪声。
为了实现平滑处理,我们假定在未受干扰或真实图像中,给定数据点的灰度值与其周围没有完全不同,理想情况下只有很小的变化。
因此,为了抑制噪声,用基于周围数据点的估计代替测量的灰度值是有用的。
这种估计可以用不同的方法来完成,因此HALCON提供了不同的平滑函数。
这些函数的速度和对不同噪音的适用程度都不相同。
复杂程度(运行时间取决对图像大小)等信息(如果有)在操作符的参考手册上会有。
虽然大多数操作符处理单个图像,但有些操作符可以处理多图像(例如,多通道滤波器,如mean_n和rank_n,
或保留边缘的滤波器,如guided_filter和bilateral_filter,它们还使用引导图像)。
请注意,有些过滤器同时具有这两种可能性,更多信息在特定的操作符介绍中给出。
1.mean_image(Image : ImageMean : MaskWidth, MaskHeight : )
mean_image对所有输入图像(Image )的灰度值进行线性平滑。
滤波器矩阵由1组成(计算相等),大小为MaskHeight x MaskWidth。
卷积的结果除以MaskHeight x MaskWidth 。
对边界处理时,灰度值反映在图像边缘。
对于mean_image特别优化是使用SIMD技术实现。
这些特殊优化的实际应用由系统参数' mmx_enable(见set_system)控制。
如果“mmx_enable”设置为“true”(和SIMD指令集可用),则使用SIMD技术进行内部计算。
请注意,SIMD技术在大的、紧凑的输入区域上表现最好。
根据输入区域和硬件的功能,
mean_image的执行时间使得SIMD技术比不使用甚至可能花费更多时间。
即使MaskHeight或MaskWidth不为奇数值,内部也会使用下一个更大的奇数值(这样,滤波器掩码的中心总是明确地确定)。
如果MaskHeight小于图像高度,则可以在OpenCL设备上对byte、int2、uint2、int2、int2和real Image执行mean_image 。
对于OpenCL来说,均值滤波器值是在内部使用32位签名整数(用于所有整数图像类型)或单个精确浮点(用于real图像)的内部计算的。
这可能导致溢出(因此不正确的结果),如果图像要么是int4,要么是真实的图像,或使用完全动态范围图像。
此外,为了提高性能,如果MaskWidth大于9,会对每一行图像进行全面扫描(再使用32位整数或单精度浮点运算),。
这也可能会导致对byte、int2或uint2图像的溢出。
在这些情况下,应该使用均值图像的CPU版本。
例程,通过均值滤波,提取血管:
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowID)
read_image (Image, 'vessel')
dev_display (Image)
dev_set_draw ('fill')
dev_set_color ('green')
dev_set_line_width (3)
texture_laws (Image, Texture, 'el', 2, 5)
mean_image (Texture, Energy, 211, 61)
binary_threshold (Energy, Vessel, 'smooth_histo', 'dark', UsedThreshold)
dev_set_draw ('margin')
get_region_contour (Vessel, VesselRows, VesselColumns)
gen_region_points (VesselBoundary, VesselRows, VesselColumns)
dev_display (Image)
clip_region (VesselBoundary, Boundaries, 0, 2, 511, 509)
dev_display (Boundaries)
(, 下载次数: 2)