視覺軟件及算法的一些探索


  這個項目萌芽於2016年,期間利用業余時間陸陸續續做了一些開發,包括軟件、算法。這里做一下階段性總結。

 

  2014年畢業后進入一家外資制造型企業工作,開發基於 Opencv 的上位機軟件。后來因為項目需要,接觸了 Halcon、VisionPro 等商業視覺軟件。當時對 VisionPro 圖形化的操作印象深刻,雖然在實際項目中還是需要進行二次開發,但是最復雜、最核心的視覺邏輯部分只需通過連線、拖拽的方式完成,很大程度上降低了開發周期。

 

  2016年前后,離開原來的公司從事非標項目開發,工作內容也從對產線的自給自足轉變為滿足客戶的各種定制化需求。從事非標的同仁應該都有深刻體會,一個項目留給上位機開發和調試的時間非常有限。機構出圖、加工、組裝、電氣接線等,到能調試時,設備往往都已經發到客戶現場,我們只能在這過程中見縫插針進行調試。在這過程中,利用空閑開始整理之前項目中積累下來的常用模塊,包括通信、相機、算法應用等,在這過程中萌生了嘗試開發視覺軟件的想法。

 

  由於當時項目開發已經從 Winform 轉移至 WPF。這個軟件框架便基於WPF搭建,算法采用 OpencvC++ 二次開發的方式。

  一個能滿足常規視覺項目的算法最小系統必須包含:【圖像匹配】、【相機標定】、【坐標系統】、【卡尺】、【搜索直線】、【搜索圓】、【斑點】以及一些幾何計算。

 

軟件包含【任務】【變量】【設備】等模塊。

算法包含【圖像匹配】【斑點】【卡尺】【搜索直線】【搜索圓】【棋盤格標定】【多點標定】【坐標系】等。

 

【圖像匹配】C++從零開始編碼,也是耗時最久的一個算法。目前在計算效率和穩定性上初步達到了預期效果。當然跟業界商業軟件還有一定差距,后續還需要繼續優化。

【相機標定】支持標准棋盤格、點陣棋盤格和DataMatrix棋盤格,其中標准棋盤格和點陣棋盤格標定方法基於 Opencv,DataMatrix棋盤格標定方法基於libdmtx庫。目前DataMatrix棋盤格標定方法還不穩定,在優化中;

【卡尺】  支持單個/多個邊緣或者單個/多個邊緣對查找;支持中間數據可視化分析;

【搜索直線】【搜索圓】基於【卡尺】方法實現;

【斑點】  支持固定閾值、相對閾值分割;目前還缺少連通域參數分析;

 

軟件界面:

 

【標定】棋盤格:

 

【標定】基於DataMatrix棋盤格:

  

【圖像匹配】界面:

   

【圖像匹配】示例:

                         

 

【卡尺】:

 

 

【卡尺】數據分析:

 

 

【搜索直線】:

 

【搜索圓】:

 

【斑點】:

 

【斑點】直方圖分析:

  

【坐標系】:

 

 這是一個簡單的測量案例示例:

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM