檢測-PCB板線路

本次分享的示例代碼很簡單,總共加起來不到20行,但是這個很簡單的案例,確有兩個很重要的halcon知識點,因此該示例算是小而精的典範。

先上代碼:

* PCB板線路檢測
* 讀圖像
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)
* detect defects ...
* 灰度圖像進行腐蝕和開運算 暗的像素變多
* 灰度圖像進行膨脹和閉運算 亮的像素變多
* 通過灰度圖像的開運算,讓線路板中斷開的地方連接起來了
gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon')
* 通過灰度圖像的閉運算,讓線路板中斷開的地方斷得更開了
gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon')
* 動態二值化,達到差分的效果
* 兩個輸入的灰度圖像,以offset爲基礎,按照指定的條件,選擇特定的灰度值組成輸出的結果灰度圖像
dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal')
dev_display (Image)
dev_set_color ('red')
dev_set_draw ('margin')
dev_display (RegionDynThresh)

兩個重點:
1. 關於形態學,可以對兩種不同的對象進行處理,一種是區域,一種是灰度圖像。在本示例代碼中,是對灰度圖像進行的處理。
對灰度圖像處理:
腐蝕和開運算 -> 暗的像素變多
膨脹和閉運算 -> 亮的像素變多
對區域進行處理:
腐蝕和開運算 -> 區域變小
膨脹和閉運算 -> 區域變大
2. 在此示例中,通過灰度形態學處理+dyn_threashold這個算子結合處理,達到了difference算子進行區域差分達到的效果。也通過差分,從而得到了PCB線路中的斷開區域。

機器視覺在3C行業的使用,PCB板的檢測是一個很重要的方面,同時和機械臂結合起來,能真正實現機器代替人,將有缺陷的PCB板區分出來。當然,本案例只是一個簡單的示例,實際的使用會比這個要複雜,但是,在實際場景中,本示例所使用的方法,是可以借鑑的。

更多最新文章,請關注公衆號:

代碼的執行效果如下所示:

待處理的PCB板圖像,通過肉眼,可以看到是有斷線的。

灰度圖像開運算:

灰度圖像閉運算:

通過dyn_threshold處理後,得到的差分區域,紅色的都是:

在原圖中標記出斷線位置:

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