這個項目萌芽於2016年,期間利用業余時間陸陸續續做了一些開發,包括軟件、算法。這里做一下階段性總結。
2014年畢業后進入一家外資制造型企業工作,開發基於 Opencv 的上位機軟件。后來因為項目需要,接觸了 Halcon、VisionPro 等商業視覺軟件。當時對 VisionPro 圖形化的操作印象深刻,雖然在實際項目中還是需要進行二次開發,但是最復雜、最核心的視覺邏輯部分只需通過連線、拖拽的方式完成,很大程度上降低了開發周期。
2016年前后,離開原來的公司從事非標項目開發,工作內容也從對產線的自給自足轉變為滿足客戶的各種定制化需求。從事非標的同仁應該都有深刻體會,一個項目留給上位機開發和調試的時間非常有限。機構出圖、加工、組裝、電氣接線等,到能調試時,設備往往都已經發到客戶現場,我們只能在這過程中見縫插針進行調試。在這過程中,利用空閑開始整理之前項目中積累下來的常用模塊,包括通信、相機、算法應用等,在這過程中萌生了嘗試開發視覺軟件的想法。
由於當時項目開發已經從 Winform 轉移至 WPF。這個軟件框架便基於WPF搭建,算法采用 Opencv 和 C++ 二次開發的方式。
一個能滿足常規視覺項目的算法最小系統必須包含:【圖像匹配】、【相機標定】、【坐標系統】、【卡尺】、【搜索直線】、【搜索圓】、【斑點】以及一些幾何計算。
軟件包含【任務】【變量】【設備】等模塊。
算法包含【圖像匹配】【斑點】【卡尺】【搜索直線】【搜索圓】【棋盤格標定】【多點標定】【坐標系】等。
【圖像匹配】C++從零開始編碼,也是耗時最久的一個算法。目前在計算效率和穩定性上初步達到了預期效果。當然跟業界商業軟件還有一定差距,后續還需要繼續優化。
【相機標定】支持標准棋盤格、點陣棋盤格和DataMatrix棋盤格,其中標准棋盤格和點陣棋盤格標定方法基於 Opencv,DataMatrix棋盤格標定方法基於libdmtx庫。目前DataMatrix棋盤格標定方法還不穩定,在優化中;
【卡尺】 支持單個/多個邊緣或者單個/多個邊緣對查找;支持中間數據可視化分析;
【搜索直線】【搜索圓】基於【卡尺】方法實現;
【斑點】 支持固定閾值、相對閾值分割;目前還缺少連通域參數分析;
軟件界面:
【標定】棋盤格:
【標定】基於DataMatrix棋盤格:
【圖像匹配】界面:
【圖像匹配】示例:
【卡尺】:
【卡尺】數據分析:
【搜索直線】:
【搜索圓】:
【斑點】:
【斑點】直方圖分析:
【坐標系】:
這是一個簡單的測量案例示例: