因為在工作上遇到影像對位的問題,此演算法可以很好的解決(雖然不是100%解決)所以特別將此演算法紀錄下來。這也是我第一次將paper 的演算法用code 從0開始完成實踐。演算法是參考這篇paper "New algorithms for 2d and 3d point matching:: pose estimation and correspondence"
1.問題描述
Network switch (Fig.1)代工廠在機台出場前,要將機台上的燈號全數打開做檢測,因為燈太多,用人眼檢測有困難,所以想用影像自動檢測。檢測的目標很單純:確認每個燈號的亮度、顏色是否異常 (燈不亮、顏色異常)。而我的演算法主要分成1)前處理:標出每個燈號亮點在圖上的位置. 2)對位:找出亮光與機台燈的對應關係(該亮點屬於機台上哪個燈號)。前處理沒什麼困難,只要機台正面沒有反光,用threshold就能將燈號凸顯出來(Fig.2)。但對位就沒這麼容易
Fig.1 Network Switch |
Fig.2 前處理threshold 後,亮燈凸顯出來 |
2.為何需要對位?
如果每次前處理的圖都像Fig.2 這麼完美,沒有燈是不亮的(簡稱Off),也沒有其他不是燈號的光被抓出來(之後簡稱漏光),那其實只要把每個亮點從上往下,從左往右照順序排,就可以知道應該對應機台上哪個位置的燈號。但實際情況會有燈故障(不然幹嘛要檢測)或者會有一些漏光必須排除,只要一發生就無法對位,所以最直接的方法是:將一個golden image (沒有Off 或漏光) 去跟檢測時的亮點作對位,位置最靠近哪個golden 亮點就標記為哪個燈號。