一、电路检测
算子解释
dyn_threshold
*dyn_threshold 利用局部阈值分割图像
*OrigImage (input_object):原始图像
*ThresholdImage (input_object):处理后图像(一般采用滤波处理)
*RegionDynThresh (output_object):分割后区域
*Offset (input_control):灰度值偏移量。
*LightDark (input_control):提取区域类型( ‘dark’, ‘equal’, ‘light’, ‘not_equal’)
dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal')
原理介绍
halcon 源码
* 电路检测方案
read_image (Image, 'pcb')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
* 开闭图像做减法 得到不同的区域
gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon')
gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon')
*dyn_threshold 局部区域阈值
*OrigImage (input_object):原始图像
*ThresholdImage (input_object):处理后图像(一般采用滤波处理)
*RegionDynThresh (output_object):分割后区域
*Offset (input_control):灰度值偏移量。
*LightDark (input_control):提取区域类型( ‘dark’, ‘equal’, ‘light’, ‘not_equal’)
dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal')
dev_display (Image)
dev_set_color ('red')
dev_set_draw ('margin')
dev_display (RegionDynThresh)
二、毛刺检测
算子解释
*用二进制阈值来分割图像。
*Image:需要进行阈值的图像
*Region:处理后的区域 输出
*Method:分割方法('max_separability':最大限度的可分性, 'smooth_histo':直方图平滑)
*LightDark:提取的是黑色部分还是白色部分
*当LightDark=light,max_separability选的区域比smooth_histo少一点
*当LightDark=dark,max_separability选的区域比smooth_histo多一点
*UsedThreshold:自动阈值使用的阈值
binary_threshold (Fin, Background, 'max_separability', 'light', UsedThreshold)
halcon 源码
* 毛刺检测案例
*思路:通过二值化将图像分开,然后消除减小区域 ,最后做区域的减法 显示
dev_update_window ('off')
read_image (Fins, 'fin' + [1:3])
get_image_size (Fins, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width[0], Height[0], 'black', WindowID)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
for I := 1 to 3 by 1
select_obj (Fins, Fin, I)
dev_display (Fin)
*用二进制阈值来分割图像。
*Image:需要进行阈值的图像
*Region:处理后的区域 输出
*Method:分割方法('max_separability':最大限度的可分性, 'smooth_histo':直方图平滑)
*LightDark:提取的是黑色部分还是白色部分
*当LightDark=light,max_separability选的区域比smooth_histo少一点
*当LightDark=dark,max_separability选的区域比smooth_histo多一点
*UsedThreshold:自动阈值使用的阈值
binary_threshold (Fin, Background, 'max_separability', 'light', UsedThreshold)
dev_set_color ('blue')
dev_set_draw ('margin')
dev_set_line_width (4)
dev_display (Background)
disp_continue_message (WindowID, 'black', 'true')
stop ()
*用圆形区域进行闭运算,能达到保留圆弧边,消除毛刺效果
closing_circle (Background, ClosedBackground, 250)
dev_set_color ('green')
dev_display (ClosedBackground)
disp_continue_message (WindowID, 'black', 'true')
stop ()
*背景差分,得出不同点
difference (ClosedBackground, Background, RegionDifference)
*用矩形开操作去除小点,保留真正的差异点
opening_rectangle1 (RegionDifference, FinRegion, 5, 5)
dev_display (Fin)
dev_set_color ('red')
dev_display (FinRegion)
*得到真正差异点的面积和中心点
area_center (FinRegion, FinArea, Row, Column)
if (I < 3)
disp_continue_message (WindowID, 'black', 'true')
stop ()
endif
endfor