上結果:
原圖爲:
上代碼:
*關閉活動圖形窗口
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)