1機器視覺系統組成
從機器視覺系統字面意思就可看出主要分為三部分:機器、視覺和系統。機器負責機械的運動和控制;視覺通過光源、工業鏡頭、工業相機、圖像采集卡等來實現;系統主要是指軟件,也可理解為整套的機器視覺設備。
1.1機器視覺光源
光源作為機器視覺系統輸入的重要部件,它的好壞直接影響輸入數據的質量和應用效果。由于沒有通用的機器視覺光源設備,所以針對每個特定的應用實例,要選擇相應的視覺光源,以達到最佳效果。常見的光源有:LED環形光源、低角度光源、背光源、條形光源、同軸光源、冷光源、點光源、線型光源和平行光源等。
1.2工業鏡頭
鏡頭在機器視覺系統中主要負責光束調制,并完成信號傳遞。鏡頭類型包括:標準、遠心、廣角、近攝和遠攝等,選擇依據一般是根據相機接口、拍攝物距、拍攝范圍、CCD尺寸、畸變允許范圍、放大率、焦距和光圈等。
1.3工業相機
工業相機在機器視覺系統中最本質功能就是將光信號轉變為電信號,與普通相機相比,它具有更高的傳輸力、抗干擾力以及穩定的成像能力。按照不同標準可有多種分類:按輸出信號方式,可分為模擬工業相機和數字工業相機;按芯片類型不同,可分CCD工業相機和CMOS工業相機,這種分類方式最為常見。
1.4圖像采集卡
圖像采集卡雖然只是完整機器視覺系統的一個部件,但它同樣非常重要,直接決定了攝像頭的接口:黑白、彩色、模擬、數字等。比較典型的有PCI采集卡、1394采集卡、VGA采集卡和GigE千兆網采集卡。這些采集卡中有的內置多路開關,可以連接多個攝像機,同時抓拍多路信息。
1.5機器視覺軟件
機器視覺軟件是機器視覺系統中自動化處理的關鍵部件,根據具體應用需求,對軟件包進行二次開發,可自動完成對圖像采集、顯示、存儲和處理。在選購機器視覺軟件時,一定要注意開發硬件環境、開發操作系統、開發語言等,確保軟件運行穩定,方便二次開發。
2機器視覺開發環境原理
2.1軟件平臺
機器視覺當前的比較流行的開發模式是“軟件平臺+工具包”。在實際視覺項目中,軟件平臺的目的就是為客戶做出一個應用程序,讓客戶一目了然地看到其產品的各項數據,例如:產量、日期、報表、NG/OK量、故障信息、調試信息、設置參數、操作工具、整個視覺控制系統等。當前機器視覺領域主要用的開發平臺有:1).VC++——目前主流選擇平臺
最通用,功能最強大。用戶多,和windows搭配,運行性能較好,可以自己寫算法,也可以用工具包,而且基本上工具包都支持C++的開發。
2).C#——逐漸發展使用
比較容易上手,特別是完成界面等功能比用VC+MFC難度低了很多,已經逐漸成為流行的使用平臺了,算法在調用標準的庫或者使用C#+C++混合編程。可以看到目前很多相機廠商的SDK都已經開始使用C#做應用程序了。3).LabVIEW——NI的工具圖形化開發平臺
開發軟件快,特別是做工控行業或者自動化測試行業的很多工程師,由于使用labview進行測試測量的廣泛性,所以都有labview的基礎,再調用NI的Vision圖像工具包開發,開發周期短,維護較為容易。適用人群有一定的限制性。4).VB、delphi、java及其他
在機器視覺領域內,基本絕跡江湖,鮮有人使用。
2.2工具包
軟件平臺生成的應用程序可以通過控制整個視覺系統來獲取對象圖像信息,對該圖像信息進行信息提取處理就需要一定的功能函數和算子,那么就需要包含大量功能函數的工具包。當前機器視覺領域主要用的工具包有:1).halcon:出自德國MVTech,當前首選使用對象。底層的封裝功能算法很多,運算性能快,使用方便簡單,若有一定軟件功底和圖像處理理論,使用其開發將會便捷。2).VisionPro:美國康耐視的圖像處理工具包。性能大多數算法性能都很好,性能上沒有和halcon直接對比過。3).NI Vision:NI的特點是自動化測試大多數需要的軟硬件都有解決方案,有點事軟件圖形化編程,上手快,開發周期快,缺點是并不是每個軟件都非常厲害。視覺工具包的優勢是售價比大多數工具包或者算法的天文數字便宜了不少,而且整個工具包一個價格,而不是一個算法一個算法地賣,性能方面在速度和精度沒有前兩種軟件好。4).MIL:加拿大maxtrox的產品,是Matrox Imaging Library的簡寫。早期推廣和普及程度不錯,當前似乎主要用戶還是早期的做激光設備的一些用戶在用,所以用于定位的較多。5).CK Vision。創科公司的軟件包,相對前面幾個工具包來說價格優勢比較明顯,另外機器視覺需要的功能也基本都有,所以在國內自動化設備特別是批量設備同時需要保護版權的企業而言,用量很大,推廣也不錯。6).邁斯肯:邁斯肯的視覺主要產品還是條碼閱讀一類,圖像工具包沒有用過,不了解,不評價。7).OpenCV:感覺openCV更多的還是用在計算機視覺領域,在機器視覺領域其實不算太多,應為機器視覺領域當前主要的應用還是定位、測量、外觀、OCR/OCV,感覺這幾項都不是opencv的專長。
2.3機器視覺系統原理
系統原理:機器視覺系統的目得就是通過機器視覺產品(即光源、鏡頭、相機、采集卡)將被拍攝的目標轉換為圖像信號,傳送給機器視覺軟件(即圖像處理系統),來代替人眼的測量、檢測和判斷。其原理是由計算機、圖像處理器以及相關設備來模擬人的視覺行為,完成得到人的視覺系統所得到的信息。隨著微型計算機技術、網絡技術、大數據融入技術發展,相信未來機器視覺系統將會代替人類完成更多難以完成的工作。
3怎么樣學習機器視覺
國外機器視覺發展到今天,已經從“一包到底”式的工作程序,已經可以清清楚楚分為三個部分:
1,底層開發部分。2,二次開發部分。3,最終使用部分。
于是在國外,從事這一行業的人現在也就可以簡單而清楚地分成三種人:
1,底層開發的人(從事底層開發工作的人);2,二次開發的人(從事二次開工作的人)。3,使用及操作機器視覺系統的人(從事最終使用工作的人).
第一類人。就是我們常說的,開發通用視覺系統開發人員,公司開發部的技術職工。第二類。是專門用第一類人所開發出的系統,給第三類人搞二次開發,開發各種專為第三類人所用的系統。第三類人,就是用戶。這類人是真正將機器視覺系統應用到各個領域中的人,他們不僅在各自的行業中使用種種已經開發成型的機器視覺系統。而且負責對各類系統進行測試及評估。舉個實際例子,:如何檢測某一工件;檢測光盤表面的系統該如何配置CCD相機、鏡頭及燈源等。問這些問題的朋友應該算是第三類人。
他們公司要他們尋找一個系統可以用來檢測本公司的產品。但由于第一類人所開發的,只是通用的系統以及視覺系統開發工具的軟件包。并沒有哪家公司專門開發一套系統來檢測光盤或是某種特定的工件。所以,這些朋友就應該來找我,因為我是第二類人。我的工作就是,專門用視覺系統開發工具軟件包為他們專門開發一套他們所需要的光盤檢測系統或是工件檢測系統。但是,我在這里所看到奇怪的現象卻是,這些第三類的朋友一直問的,都是第二類人所問的問題。
如:問應該用哪家公司的開發軟件;用什么樣的CCD;如何標定等等。我真的不知道如何回答你:你明明是第三類人,要找第二類人幫忙。現在卻以第二類人的身份甚至是以第一類人的身份問問題。或許有的朋友會這樣說:我雖然是第三類人,但我對機器視覺有興趣,想自己學習啊!
這就是我想討論的:到底如何學習機器視覺?我個人認為,應該先確定自己的身份,從自己具體的需要入手來學習。舉個例子:大家一定都有學習英文的經驗,而且也一定都有同樣的感覺----怎么學也學不 好----我就是這樣。我們拋開所謂的語言天分不說,大家學不好的原因其實很簡單:沒有語言環境。
一語中的啊!學而不用,怎么也不會學好。同樣,學習機器視覺,無論你在書本上看了多少理論,你自己若沒有實際動手操作、編程的經驗也是枉然。還不如從你每天能接觸得到的東西開始學習。教游泳的教材隨手可得但為什么并非人人都下得了水呢?
要成為第一類人,又分硬件及軟件兩種。要對自己所負責的這個模塊非常了解,搞軟件要知道算法及運行速度;搞硬件要明白公司所選用芯片的特點等等。同時還要清楚對手公司的優缺點以及機器視覺這一行的種種動態和最新技術。
想成為第二類人,你一定要是個通才。就是說什么都要知道一點。不僅要了解第三類人的要求,而且也要知道各種第一類人(不同品牌的視覺卡及軟件包)的水平。
要成為第三類人,不僅要有機器視覺基本的相關知識。而且,要對自己所工作的行業及領域的機器視覺系統非常熟悉。專作你這行的機器視覺公司有哪幾家?各有什么優缺點等等。總結一下。這三種人相比,第一類人一定要專業,對機器視覺的某一領域非常非常了解;第二類人雖比不上第一類人那么專業,但更加全面;第三類人更熟悉各個應用系統開發公司(第二類人)的優缺點。
所以怎么樣學習機器視覺,就請踏實下來,戒浮躁,從最基本地學起。在這里介紹下目前常見的具體學習方式采用VS2010中C++構造MFC應用程序,相信WINDOWS開發的對VC肯定不會不熟,作為一個經典的版本VC6.0可謂很多人的開發工具,從早期一直演變過來的VC6.0除了程序員常用外,作為現在的很多高等學校的教學工具,VC一個履行著它的使命,就是到現在經過VS2008的洗禮后,相信還有很多開發人員還存留著VC6.0,這個版本對于程序員而言有著太多的感慨,然而隨著Visual Studio2010的發布,相信這作為一個時代經典的產品也必將開始慢慢的走出人們的視線,讓我們開始從VC轉向Visual Studio 2010。
首先當屬Visual C++工程及其構建系統,這其中包括了MSBuild、VC__目錄、工程依賴性、宏與環境變量等,我們舉個簡單的例子,現在VC++目錄設置位于兩個地方,可以使用項目屬性頁來設置每個項目對應的VC++目錄,也可以使用屬性管理器和一個屬性表來設置全局性的并且使每個配置值對應的VC++目錄。
第二,Visual Studio 2010中VC++庫變化。這其中包括到analyze警告、重啟動管理器、MFC庫、ATL宏、新庫等,在Visual Studio 2010中新引入了CTaskDialog類可用于代替標準的AfxMessageBox消息框。CTaskDialog類能夠顯示和收集比標準的消息框更多的信息。第三、集成開發環境(IDE)變化。主要變化有改進的錯誤智能感知支持、#include自動完成特征等。在Visual Studio 2010中,集成開發環境(IDE)支持更好地檢測可能導致丟失智能感知支持的錯誤,并在這些內容下面顯示以紅色波浪下劃線。此外,集成開發環境還支持把智能感知的錯誤輸出到錯誤列表窗口中。要想觀察導致問題的相關代碼,你只需要雙擊錯誤列表窗口中的錯誤即可。當然在#include自動完成特征中也有體現。
言歸正傳,初學者使用Visual Studio 2010中的C++ MFC開發視覺應用程序,有以下幾點優勢:
語法方面:C的語法構造比較少,有限的幾種是:struct union enum等類型定義,函數定義,指針和數組派生類型,變量定義,三類(順序、分支、循環)基本結構構造語句,各種繁多的運算符以及特殊的賦值,其中全局可見的只有類型、變量和函數,函數內部可以擁有除了函數以外的任意構造,但是,對于函數的返回值類型有限制。總之,C是語法簡單,一致性較好,相對正交,基本可以任意組合的語言。
庫方面:C語言的標準庫很少,除了基本的IO庫以外,就是低層次的memory和string操作的庫了,還有一些非常基本的數學庫。剩下的文件系統相關的(包括ftp,nfs,http,smtp,pop等高層網絡協議)庫不存在,圖形圖像處理的庫也不存在。控件庫,數據庫訪問庫,多媒體編碼解碼庫,安全庫,加密庫,認證庫也都不存在。
不過,它們都可以通過非標準C庫來獲得。另外別的類型的庫也都存在,而且跟C語言的結合比較自然,跟C語言以及標準C庫的感覺一樣,因為它們大都是C寫的。總之,C標準庫非常少,但是擴展庫很全,不至于造成某些壁壘。
開發工具方面:C語言的語法特征比較少,可以完全記在腦子里,所以編程序的時候不太依賴于輔助工具,當然,能夠提供指示庫接口的開發工具仍然是受歡迎的。
MFC建立應用程序框架有以下幾點特點:
第一、MFC類圖。MFC為編程人員提供了幾大用來構建一個Windows程序的類,在通過VC++創建項目時,IDE會給程序員自動添加這些類。
第二、RTTI(Run-Time Type Identification)運行時類型識別。
第三、Dynamic Creation(動態創建)。
第四、Persistence(永久保存)機制。MFC中通過這個機制,將用戶輸入的數據全部都保存下來,同時也可以打開同類型的文件。
第五、Message Mapping(消息映射)。MFC程序中系統消息能夠傳到每個類各自負責的函數、方法中,每個類都能處理屬于他獨特的消息事件,主要就是通過消息映射來完成的,其實消息映射有點像第二個技術動態創建類的結構關系,而這里只是針對程序中每個類中的消息進行一個動態鏈表的建立。
第六、Command Routing(命令傳遞)。MFC的消息有兩類,一類是普通消息,一類是系統消息,普通消息都是從派生類將消息傳遞到父類中。
系統消息先由CFrameWnd類接受消息,并且傳遞給其父類CWind類,這里CWind類中的消息處理只是做一個消息傳遞的工作,而CWind類則交給CView類處理,如果沒有處理函數這要CView類的父類CWind處理,同樣這里CWind類中的消息處理只是做一個消息傳遞的工作,如果還沒有找到,則系統會要求CDocument類處理,如果沒有匹配的則又會回到CWind類中,然后在CWind類遍歷自己的消息映射表,如果沒有對應的處理則表消息處理權流回到CWinApp類中,如果還沒有找到則會退回到CWind類中執行DefWindowProc()函數。因此整個消息傳遞過程就結束了。
有了應用程序后,那么就能為用戶提供實在看得著操作得了的軟體界面程序,但僅只有邏輯層面,并沒有處理功能模塊。也就虛有其表,中看不中用的地步。因此為了滿足實際視覺項目需要,學習一門圖像處理至關重要。在這里推薦學習HALCON,因為HALCON是德國MVtec公司開發的一套完善的標準的機器視覺算法包,擁有應用廣泛的機器視覺集成開發環境。它節約了產品成本,縮短了軟件開發周期——HALCON靈活的架構便于機器視覺,醫學圖像和圖像分析應用的快速開發。
在歐洲以及日本的工業界已經是公認具有最佳效能的Machine Vision軟件。事實上,這是一套image processing library,由一千多個各自獨立的函數,以及底層的數據管理核心構成。其中包含了各類濾波,色彩以及幾何,數學轉換,型態學計算分析,校正,分類辨識,形狀搜尋等等基本的幾何以及影像計算功能,由于這些功能大多并非針對特定工作設計的,因此只要用得到圖像處理的地方,就可以用HALCON強大的計算 分析能力來完成工作。應用范圍幾乎沒有限制,涵蓋醫學,遙感探測,監控,到工業上的各類自動化檢測。
HALCON支持Windows,Linux和Mac OS X操作環境,它保證了投資的有效性。整個函數庫可以用C,C++,C#,Visual basic和Delphi等多種普通編程語言訪問。HALCON為大量的圖像獲取設備提供接口,保證了硬件的獨立性。它為百余種工業相機和圖像采集卡提供接口,包括GenlCam,GigE和IIDC 1394。
選擇HALCON出于以下3點理由:
1.為了讓使用者能在最短的時間里開發出視覺系統,HALCON包含了一套交互式的程序設計界面HDevelop,可在其中以HALCON程序代碼直接撰寫,修 改,執行程序,并且可以查看計算過程中的所有變量,設計完成后,可以直接輸出C、C++、VB、C#、vb等程序代碼,套入您的程序中。HDevelop同時和數百個范例程序鏈接,除了個別計算功能的說明,您也可以隨時依據不同的類別找到應用的范例,方便參考。此外,以問題為導向的手冊, 可以讓您找到最適切的使用說明以及作業觀念。
2.HALCON不限制取像設備,可以自行挑選合適的設備。原廠已提供了60余種相機的驅動鏈接,即使是尚未支持的相機,除了可以透過指標(pointer)輕易的抓取影像,還可以利用HALOCN開放性的架構,自行撰寫DLL文件和系統連接。
3.使用HALOCN,在設計人機接口時沒有特別的限制,也不必特別的可視化組件,您可以完全使用開發環境下的程序語言,例如visual studio、.NET、Mono等等,架構自己的接口,end user看不到您的開發工具,而且在執行作業的機器上,只需要很小的資源套件。
最后,機器視覺項目里,我們需要在VC++中編寫出應用程序,作為操作平臺,用HALCON做出特定圖像處理功能模塊,混合編程后植入主程序里,最后實現客戶需求完成可視化。其中,當做不同的項目時候,很大程度上,主體程序無須重新做,可以在以前做好的程序框架加以修改,減少工作量,只需要重新做新的圖像處理,再植入主程序即可。
-
機器視覺
+關注
關注
161文章
4266瀏覽量
119542
原文標題:機器視覺系統原理及學習策略
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論