Halcon 劃痕檢測

上結果:
在這裏插入圖片描述
原圖爲:
在這裏插入圖片描述
上代碼:

*關閉活動圖形窗口
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)
*設置混合輸出顏色爲12dev_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) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章