機(jī)器視覺軟件的插件開發(fā)——NeuroCheck的邊緣檢測(cè)插件的設(shè)計(jì)
圖1 NeuroCheck 的界面
在計(jì)算機(jī)技術(shù)和自動(dòng)化控制技術(shù)迅速發(fā)展的今天,機(jī)器視覺技術(shù)日趨成熟,其產(chǎn)品能夠準(zhǔn)確、快速地探測(cè)零件表面特征,在工業(yè)控制、汽車制造等領(lǐng)域有著廣闊的應(yīng)用前景。
機(jī)器視覺,根據(jù)美國(guó)機(jī)器人工業(yè)協(xié)會(huì)(Robotic Industries Association)的定義是指:“通過光學(xué)的裝置和非接觸的傳感器自動(dòng)地接收和處理一個(gè)真實(shí)物體的圖像,以獲得所需信息或用于控制機(jī)器人運(yùn)動(dòng)的裝置。”
目前工業(yè)用機(jī)器視覺產(chǎn)品主要根據(jù)工業(yè)照相機(jī)是否具有圖像處理功能而分為兩大類,一類稱為PC –based,由計(jì)算機(jī)中的軟件進(jìn)行圖像處理工作;另一類稱為Smart –Camera,即照相機(jī)中直接集成了圖像處理芯片。
德國(guó)NeuroCheck公司 的NeuroCheck軟件是一種PC –based產(chǎn)品,它被德國(guó)各大汽車制造商以及汽車零部件生產(chǎn)商廣泛應(yīng)用于產(chǎn)品的質(zhì)量檢測(cè)環(huán)節(jié)。該軟件有著顯著的特點(diǎn)及優(yōu)點(diǎn),但也有一些缺憾,而為它設(shè)計(jì)插件,對(duì)其功能進(jìn)行補(bǔ)充和完善,則可以使它的功能得以更好地發(fā)揮。
圖2 NeuroCheck 的使用方法
NeuroCheck的主要功能及特點(diǎn)
NeuroCheck具有獨(dú)立的操作界面,使用時(shí)不需要依附任何其它的軟件,其風(fēng)格簡(jiǎn)單,容易上手。其界面風(fēng)格可見于圖1:
它的主要功能有條形碼鑒別、矩形碼鑒別、存在性檢驗(yàn)、特征量測(cè)量、定位、字符與模式識(shí)別、打印制量檢查以及色彩處理等,涉及機(jī)器視覺工業(yè)應(yīng)用的各個(gè)主要領(lǐng)域。其特點(diǎn)就是將每個(gè)功能模塊做成獨(dú)立的函數(shù),操作者只要在所應(yīng)用的“檢測(cè)程序”(Check Routine)里將其一一調(diào)用,并設(shè)置合適的參數(shù)即可(如圖2)。
事物總是有兩面性的,NeuroCheck的使用簡(jiǎn)單是由于其設(shè)計(jì)者為使用者考慮了很多實(shí)際問題,并且封裝了大量的函數(shù),使使用者根本感覺不到他是在進(jìn)行專業(yè)的圖像處理工作,而只是如同在使用很簡(jiǎn)單的應(yīng)用軟件;但是正由于此,在一些高層次的或者有特殊需要的應(yīng)用方面,NeuroCheck并不能滿足使用者的要求,而且正由于軟件的設(shè)計(jì)者們考慮了很多使用性的問題,這必然分散了他們對(duì)于圖像處理本身的注意力,因此NeuroCheck有些關(guān)于圖像處理的函數(shù)其處理結(jié)果并不能盡如人意。
圖3 NeuroCheck返回結(jié)果精度的各向異性
為了解決這一問題,NeuroCheck公司特意為其軟件開發(fā)了一套插件接口,使得使用者可以根據(jù)其特殊需要自行根據(jù)圖像處理領(lǐng)域的理論和算法進(jìn)行代碼編寫,并且這些代碼可以通過該接口被封裝成適合在NeuroCheck中被調(diào)用的函數(shù),這些函數(shù)即是插件函數(shù),它們?cè)诒皇褂玫臅r(shí)候就如同NeuroCheck的內(nèi)嵌函數(shù)一樣。
NeuroCheck的插件接口
編寫這些插件比較合適的編程語(yǔ)言是C或者C++。以VC++開發(fā)環(huán)境為例,當(dāng)編程者編寫好代碼后,需要將其生成為動(dòng)態(tài)鏈接庫(kù)(DLL)文件,然后由NeuroCheck將這些文件加入到其插件庫(kù)中。完成這些之后,NeuroCheck和插件動(dòng)態(tài)鏈接庫(kù)之間將通過獲取版本號(hào)、獲取函數(shù)數(shù)目、獲取函數(shù)說明、獲取數(shù)據(jù)類型、獲取數(shù)據(jù)描述這5個(gè)固有函數(shù)進(jìn)行通信。
每一個(gè)插件可以包含若干個(gè)插件函數(shù)(Plug-In Function)。每一個(gè)插件函數(shù)又包含有相當(dāng)數(shù)目的子函數(shù),其中主要的有初始化(Init)、逆初始化(Deinit)、執(zhí)行(Exec)、對(duì)話框(Dialog)、顯示(View)等幾個(gè)。在這些子函數(shù)中,則是使用者可以根據(jù)相應(yīng)算法大量編寫代碼的地方,例如:
1、在VC++環(huán)境下,編程者可以在資源編輯器中編輯合適的操作界面,即對(duì)話框,然后可以在對(duì)話框子函數(shù)中加入相應(yīng)代碼,以使參數(shù)得以傳遞。
2、如果需要在程序開始時(shí)傳遞默認(rèn)參數(shù),可以在初始化子函數(shù)中添加相應(yīng)代碼。同時(shí),初始化和逆初始化為一對(duì)必不可少的子函數(shù),保證內(nèi)存的分配與取消,以使NeuroCheck程序不會(huì)和系統(tǒng)或其他程序發(fā)生沖突。
圖4 線形ROI上的像素
3、在執(zhí)行子函數(shù)中,則包含了主要的算法,編程者可以在其中編寫任何有關(guān)圖像預(yù)處理和圖像理解的代碼。
4、在顯示子函數(shù)中,如果NeuroCheck本身顯示的結(jié)果不滿足編程者的要求(因?yàn)槠滹@示結(jié)果的模塊畢竟有限),讀者可以根據(jù)自身需求調(diào)用其它VC++函數(shù)來(lái)使自己程序的結(jié)果可視化。
關(guān)于邊緣檢測(cè)的插件設(shè)計(jì)
在使用機(jī)器視覺軟件進(jìn)行圖像處理操作時(shí),一般首先都需要設(shè)定待處理區(qū)域,即通常所說的Region Of Interest (或者Area Of Interest)。根據(jù)應(yīng)用目的,ROI分為區(qū)域和線形兩種。在邊緣檢測(cè)中,因?yàn)槌3P枰付ㄎ矬w延某個(gè)方向的邊緣,所以常常使用線形ROI。
NeuroCheck在進(jìn)行邊緣檢測(cè)操作時(shí),計(jì)算精度一般只有整像素精度,即使選擇其內(nèi)嵌的亞像素精度檢測(cè)函數(shù),計(jì)算精度仍然不高。而且因?yàn)樗乃惴ú痪邆涓飨蛲?,還產(chǎn)生了一個(gè)很奇怪的現(xiàn)象:即如果線形ROI與水平線夾角在0°~45°之間,那么NeuroCheck返回的結(jié)果在水平方向?yàn)閬喯袼鼐榷Q直方向?yàn)檎袼鼐?;如果線形ROI與豎直線夾角在0°~45°之間,則結(jié)果的精度的方向性正好相反;只有在線形ROI的角度與各象限的角平分線十分接近時(shí),返回的結(jié)果才同時(shí)具有兩個(gè)方向上的亞像素精度(見圖3)。
在以往的關(guān)于邊緣檢測(cè)的算法設(shè)計(jì)中,一般的思想是使用一個(gè)二維算子對(duì)圖像的灰度值矩陣進(jìn)行相關(guān)運(yùn)算,利用圖像灰度值的梯度提取圖像邊緣(邊緣所在位置梯度值較大),這些算子其實(shí)就是矩陣,它們一般是具有方向性的,而且由于矩陣的局限性,這些方向通常也就是水平、豎直和45°角幾種;有一種算子即LoG(Laplacian of Gaussian)算子是具有各向同性的,它利用的是圖像灰度值的二階差分。但是如果在亞像素精度要求下使用LoG算子,計(jì)算量將非常大。猜測(cè)NeuroCheck是因?yàn)椴扇×四撤N折衷的算法,所以導(dǎo)致出現(xiàn)了精度的各向異性。
根據(jù)John Canny提出的一條思想,即邊緣檢測(cè)算子是針對(duì)一維信號(hào)表達(dá)的,插件的設(shè)計(jì)思想為,首先將含有邊緣的灰度信息提取到某個(gè)一維空間,然后在此空間內(nèi)根據(jù)零穿越點(diǎn)(Zero-Crossing)的思想以較高的精度定位邊緣的位置。
圖5 待檢測(cè)的支架(bracket)及其前端檢測(cè)圖
邊緣的信息可以被提取到檢測(cè)邊緣時(shí)所使用的線形ROI上(如圖4),此時(shí)ROI上像素灰度值可以利用原圖像的像素灰度值使用加權(quán)平均的方法求得。
在獲得的這組ROI上的像素灰度值中,可以首先利用其梯度(即一階差分)首先對(duì)邊緣進(jìn)行初步的定位,同時(shí)還可以獲得邊緣的順序、高度、升降性等信息,并利用這些信息對(duì)邊緣進(jìn)行進(jìn)一步的篩選,只留下所感興趣的一個(gè)或幾個(gè)邊緣。然后在所獲灰度值的二階差分中,根據(jù)邊緣所在位置其二階微分為零的原理(即Zero-Crossing),對(duì)這少數(shù)幾個(gè)邊緣使用拉格朗日插值和二分迭代的方法,精確地定位邊緣。
由于零穿越點(diǎn)算法容易受噪聲影響(原始數(shù)據(jù)做了兩次差分運(yùn)算),且將邊緣信息提取到線形ROI上時(shí)噪聲的影響也比較大,所以插件中還設(shè)計(jì)了一個(gè)步驟,使用均值濾波的思想濾除噪聲。
經(jīng)過大量的數(shù)據(jù)測(cè)試,該插件的測(cè)量精度從標(biāo)準(zhǔn)差的角度來(lái)看,優(yōu)于原NeuroCheck的內(nèi)嵌函數(shù)三倍以上,并且該插件具有各向同性。另外從實(shí)時(shí)性能上看,該插件的運(yùn)行時(shí)間為十毫秒級(jí),完全符合工業(yè)檢測(cè)的需要(如圖5)。與一般邊緣檢測(cè)方法不同的是,該插件不適合用于直接檢測(cè)物體的邊緣輪廓,否則計(jì)算量將十分大,造成計(jì)算時(shí)間十分長(zhǎng),無(wú)法應(yīng)用。
總結(jié)
如前所述,各種工業(yè)用機(jī)器視覺軟件都有各自的優(yōu)缺點(diǎn)。NeuroCheck使用簡(jiǎn)單,但是功能有時(shí)不夠強(qiáng)大,而且有時(shí)還會(huì)存在明顯的應(yīng)用Bug。雖然其公司在不斷地推出新版本、新功能以彌補(bǔ)以前的缺陷,但是作為它的使用者,仍然需要利用它提供的插件接口,根據(jù)自身實(shí)際應(yīng)用的要求,對(duì)它的功能進(jìn)行完善和補(bǔ)充。畢竟機(jī)器視覺軟件是用于質(zhì)量檢測(cè)目的的,其本身的質(zhì)量是不可忽視的問題,而且這對(duì)于開發(fā)具有自主知識(shí)產(chǎn)權(quán)的同類軟件也有很大的幫助。
編輯推薦
最新資訊
-
“京采組合”創(chuàng)領(lǐng)變革 —— 一站式商
2025-09-16 17:53
-
旭化成發(fā)布新型傳感解決方案,無(wú)需攝
2025-09-16 15:53
-
電裝中國(guó)以創(chuàng)新助力“雙碳”目標(biāo) 推
2025-09-12 15:42
-
汽車新零售又出黑馬,久車GO百城聚力
2025-09-12 15:25
-
思看科技走進(jìn)浙大課堂,產(chǎn)教融合賦能
2025-09-11 20:45