检测-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處理后,得到的差分區域,紅色的都是:
在原圖中標記出斷線位置:
總結
- 上一篇: 一些android预装应用名字对应关系
- 下一篇: 孔板流量计与均速管流量计的比较