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