上结果:
原图为:
上代码:
*关闭活动图形窗口
dev_close_window()
*在程序执行中指定输出行为为off。
dev_update_window('off')
*step: acquire image步骤:获取图像
* ****读入文件名为'surface_scratch'的图像到Image
read_image(Image,'D:/HalconWorkplace/img/Scratches.png')
get_image_size(Image,Width,Height)
*打开一个和Image宽高比一致的图像窗口
dev_open_window_fit_image(Image,0,0,Width,Width,WindowID)
*设置窗口字体大小为12,字体类型为Courier,粗体不倾斜字体。
set_display_font(WindowID,12,'Courier','true','false')
*设置填充模式为'margin'
dev_set_draw('margin')
*定义输出轮廓线宽为4
dev_set_line_width(4)
*显示Image到窗口
dev_display(Image)
*WindowID窗口使用黑色字体在一个方框内显示按"F5"继续运行字体,并注F5消息处理
disp_continue_message(WindowID,'black','true')
stop()
* step: segment image步骤:图像分割
*-> using a local threshold使用局部阈值
*对Image进行7*7均值滤波
mean_image(Image,ImageMean,7,7)
*得到的图像为:
*用均值滤波图像作为二值化阈值图像,返回小于灰度值小于该点阈值-5的图像。
dyn_threshold(Image,ImageMean,DarkPixels,5,'dark')
*得到的区域为: -> extract connected components
*提取连通分量
*由分割出来的DarkPixels获得连通区域到ConnectedRegions
*******得到的连通区域为:
***************************************
connection(DarkPixels,ConnectedRegions)
*设置混合输出颜色为12种
dev_set_colored(12)
*显示当前图形窗口中的图像对象。
dev_display(ConnectedRegions)
disp_continue_message(WindowID,'black','true')
stop()
* step: process regions处理区域
*-> select large regions选取大区域
*从ConnectedRegions中得到面积大于10小于1000的区域到SelectedRegion
select_shape(ConnectedRegions,SelectedRegions,'area','and',10,1000)
*设置当期图像窗口的图像对象为Image
dev_display(Image)
*设置当期图像窗口的图像对象为SelectedRegions
dev_display(SelectedRegions)
disp_continue_message(WindowID,'black','true')
stop()
*-> visualize fractioned scratch可视化划分划痕
*打开窗口设置局部
*//open_zoom_window (0,round(Width/2),2,303,137,496,3,WindowHandleZoom)
*设置输出颜色为蓝色
dev_set_color('blue')
dev_display(Image)
dev_display(SelectedRegions)
disp_continue_message(WindowID,'black','true')
stop()
*-> merge fractioned scratches via morphology通过形态学合并划痕
*合并SelectedRegions的并集到RegionUnion
union1(SelectedRegions,RegionUnion)
*以3.5作为圆形区域扩张的半径,对RegionUnion扩张得到RegionDilation
dilation_circle(RegionUnion,RegionDilation,3.5)
dev_display(Image)
dev_display(RegionDilation)
disp_continue_message(WindowID,'black','true')
stop()
*由RegionDilation获取骨架给Skeleton
skeleton(RegionDilation,Skeleton)