齊凱,于正林,張博龍,宋慶
(長春理工大學(xué) 機(jī)電工程學(xué)院,長春 130022)
本文中所涉及的微光瞄準(zhǔn)鏡故障為簡單的亮點(diǎn)、黑斑。為了較好地識(shí)別出這類故障,結(jié)合OpenCV[1]與VC 技術(shù),我們采用的是圖像減影法。首先,通過采集系統(tǒng)采集到30 幅微光瞄準(zhǔn)鏡圖像,然后對(duì)這30 幅圖像求平均得到一幀標(biāo)準(zhǔn)圖像。經(jīng)圖像濾波后,用后來采集到的圖像與標(biāo)準(zhǔn)圖像相減,判斷與標(biāo)準(zhǔn)圖像是否存在差異點(diǎn),從而判斷是否存在故障。該算法簡單實(shí)用,能有效地識(shí)別出光學(xué)瞄準(zhǔn)鏡上諸如亮點(diǎn)、黑斑等故障。
此部分工作由CCD 數(shù)字相機(jī)、圖像采集卡與處理計(jì)算機(jī)構(gòu)成。本實(shí)驗(yàn)中我們需要一個(gè)所謂的微光瞄準(zhǔn)鏡標(biāo)準(zhǔn)圖像,然后通過有故障的圖像與標(biāo)準(zhǔn)圖像相減,從而判斷出圖像與標(biāo)準(zhǔn)圖像的差別,繼而判斷出微光瞄準(zhǔn)鏡上是否存在故障。在此模塊中設(shè)立了一個(gè)初值為零的計(jì)數(shù)器,在對(duì)圖像進(jìn)行采集的時(shí)候,會(huì)對(duì)新采集到的圖像通過濾波進(jìn)行降噪處理,然后與前一次采集處理的圖像幀比較,若差異超出噪聲影響范圍則丟棄這幀圖像進(jìn)行下一次采集,否則將新一幀圖像保存起來并對(duì)計(jì)數(shù)器加一,之后進(jìn)行下一次采集。如此循環(huán)下去直到計(jì)數(shù)器的值為30,即計(jì)算機(jī)已經(jīng)保存了30幀經(jīng)過降噪處理的無故障圖像,把這30 幀圖像進(jìn)行平均化處理便可得到一幀標(biāo)準(zhǔn)圖像,如圖1 所示。
圖1 30 幀圖像進(jìn)行平均化處理后的標(biāo)準(zhǔn)圖像
圖像故障識(shí)別的基本原理是采用當(dāng)幀圖像與標(biāo)準(zhǔn)圖像相加(減)等算法去除背景等不變的部分,所剩下的就是圖像超差的特征部分[2]。若采集的當(dāng)幀圖像與標(biāo)準(zhǔn)圖像相減后存在超差的部分,則認(rèn)為圖像存在故障,反之若不存在超差的部分,則認(rèn)為不存在圖像故障。
黑斑、亮點(diǎn)故障識(shí)別的實(shí)現(xiàn)原理:光學(xué)瞄準(zhǔn)鏡圖像是一個(gè)時(shí)間平穩(wěn)過程,其屏幕噪聲為正態(tài)白噪聲,可以先用濾波去除圖像噪聲,之后將被測(cè)圖像與標(biāo)準(zhǔn)圖像相減,把相減結(jié)果與亮、暗閾值圖像加以比較,若超出閾值則認(rèn)為圖像發(fā)生了黑斑或亮點(diǎn)故障[3]。
本實(shí)驗(yàn)中,由CCD 攝像機(jī)傳輸過來的圖像不但存在背景像素,而且也存在噪聲像素。所謂噪聲,就是圖像在傳輸過程中由于各種內(nèi)部或外部的干擾而造成的像素灰度突變[4]。圖像噪聲可能主要是來自以下幾個(gè)方面:CCD攝像機(jī)的攝取器件在光電、電磁轉(zhuǎn)換過程中引起的人為噪聲;周圍環(huán)境的影響如人的走動(dòng)、咳嗽、光照等所引起的噪聲;由物理的不連續(xù)性或粒子性引起。
濾波處理雖然可以較好地消除噪聲,但同時(shí)又會(huì)在一定程度上帶來平均化的缺點(diǎn)。即噪聲雖然被消除,可圖像灰度尖銳變化的線和邊緣卻模糊不清了。所以本文中我們采用了“中值濾波”法,這種方法既可保持邊緣又能消除其它部分噪聲中值濾波法[5](Median Filtering)是一種可有效抑制噪聲的基于排序統(tǒng)計(jì)理論非線性平滑濾波方法。其原理是:先確定一個(gè)以某個(gè)像素為中心的鄰域,一般為方形鄰域(通常被稱為窗口),然后將鄰域中各個(gè)像素的灰度值進(jìn)行排序,并取其中間值作為中心點(diǎn)像素的新值;當(dāng)窗口在圖像中上下左右進(jìn)行移動(dòng)后,利用中值濾波算法便可以很好地對(duì)圖像進(jìn)行平滑處理。如圖2為濾波后的標(biāo)準(zhǔn)圖像。
圖2 濾波后的圖像
所謂“減影”,也叫做“差影”(Subtraction)。其原理就是將前后捕獲到的兩幅圖像對(duì)應(yīng)坐標(biāo)的像素灰度值相減,得到的各點(diǎn)灰度差值組成新的結(jié)果圖像。實(shí)質(zhì)上也就是要對(duì)圖像進(jìn)行檢測(cè)和分割。一幅圖像中包含對(duì)象物、背景和噪聲,而我們要得到的只是其中的某個(gè)部分或者某些點(diǎn),將這些部分或者將這些點(diǎn)提取出來的過程我們稱為圖像的分割,常用的方法有:按邊緣不同來劃分各個(gè)區(qū)域;按灰度幅度不同來分割各個(gè)區(qū)域;按形狀來劃分各個(gè)區(qū)域等。
根據(jù)像素灰度的分布以及變化,可以對(duì)灰度圖進(jìn)行分割與檢測(cè),常用的方法是找出對(duì)象物和背景灰度的邊界,我們把這個(gè)邊界稱為“閾值”,然后以這個(gè)閾值為界限將圖像中所有像素分為兩部分:屬于對(duì)象物灰度范圍的像素群和不屬于對(duì)象物灰度范圍的像素群。接下來再分別將這兩種像素群設(shè)置成0 和255 兩個(gè)不同的灰度值,我們把這個(gè)過程稱作“二值化”[6]。這樣我們就可以在圖像數(shù)據(jù)中很容易的看出哪部分是我們需要的,哪部分是我們不感興趣的。通過對(duì)圖像的分割和檢測(cè),就可識(shí)別對(duì)象物了。
首先,需要設(shè)定一個(gè)合理有效的閾值。本文使用了OpenCV 中cvCreateTrackbar 這個(gè)函數(shù)創(chuàng)建了一個(gè)最小值為0 最大值為255 的拖動(dòng)條,如圖3 所示。這樣,在閾值的選擇方面有著很高的靈活性,在不同的環(huán)境或是其他的特殊情況下,我們可以有選擇地在0 到255 中間選擇我們需要的合理的閾值。經(jīng)過反復(fù)測(cè)試,本實(shí)驗(yàn)中我們把這個(gè)閾值設(shè)置在29 到31 區(qū)間,這個(gè)區(qū)間的閾值能更有效地識(shí)別出亮點(diǎn)、黑斑的故障。
圖3 拖動(dòng)條
在本文中,對(duì)圖像上每個(gè)像素點(diǎn)進(jìn)行了相減運(yùn)算,為了實(shí)現(xiàn)這個(gè)功能,在OpenCV 中使用了cvGet2D 這個(gè)函數(shù)。s1=cvGet2D(img0,i,j)這個(gè)函數(shù)的意思是獲取img0圖像中坐標(biāo)為(i,j)的像素的點(diǎn)存在s1 中。這時(shí)我們便得到了標(biāo)準(zhǔn)圖像中每個(gè)像素點(diǎn)的值。同樣我們利用s2=cvGet2D(img1,i,j)這個(gè)函數(shù)得到故障圖像中坐標(biāo)為(i,j)的像素值。然后把有故障圖像與標(biāo)準(zhǔn)圖像逐個(gè)像素對(duì)應(yīng)相減。若相減的結(jié)果大于所設(shè)定的閾值,我們則認(rèn)為圖像是有故障的,把這些點(diǎn)設(shè)置為0,即為黑色。然后把這些有故障的點(diǎn)標(biāo)記下來。本文使用的是cvSet2D(img2,i,j,s2)函數(shù)。而小于等于閾值的我們?cè)O(shè)定為255,即為白色。這樣我們?cè)诤瘮?shù)中再次使用一個(gè)循環(huán)遍歷img2 相減后得到圖像的所有像素點(diǎn),如果有值為0 的點(diǎn),則認(rèn)為圖像是有故障的。因?yàn)槭菍?duì)圖像上逐個(gè)點(diǎn)的像素進(jìn)行對(duì)應(yīng)相減,此種算法的精度很高。另外,此種算法中所用到的cvGet2D 和cvSet2D 兩個(gè)函數(shù)會(huì)在遍歷整幅圖像時(shí)把有故障點(diǎn)的位置記錄并標(biāo)記下來,這樣我們?cè)谟?jì)算這些點(diǎn)的坐標(biāo)時(shí)就一目了然了。
圖4為我們所定義的有故障圖像,從中我們可以看出,與標(biāo)準(zhǔn)圖像相比,圖4 中有明顯的4 個(gè)亮點(diǎn)以及一些黑斑。在兩幅圖像相減后有故障的點(diǎn)我們已經(jīng)設(shè)置成255,即為白色,而沒有故障的點(diǎn)我們已經(jīng)設(shè)置為0,即為黑色。所以兩幅圖相減后我們得到了如圖5 所示的減影后的圖像,圖像中白色的部分為有故障的圖像與標(biāo)準(zhǔn)圖像差異的部分。而兩幅圖像相同的部分也就成了如圖所見的黑色的背景。如果出現(xiàn)了如圖5 所示白色小點(diǎn)的部分,那么也就證明了圖像是存在黑斑或者亮點(diǎn)的,這便說明圖像是有故障的,也就證實(shí)了我們的算法是合理并且有效的。
圖4 有故障圖像
圖5 減影后的圖像
用減影方法來處理圖像簡單高效,此算法成功地識(shí)別出了微光瞄準(zhǔn)鏡中諸如亮點(diǎn)、黑斑等圖像的故障。而且可以根據(jù)環(huán)境的變化以及實(shí)驗(yàn)需要自動(dòng)調(diào)節(jié)合理的閾值。在精度上有了質(zhì)的飛躍,同時(shí)能方便地求出故障點(diǎn)的坐標(biāo)位置。但在判別其他的像閃光、忽明忽暗等故障還存在一些缺陷,算法循環(huán)偏多,不能達(dá)到較高的處理速度,在這方面以后還需要多加改進(jìn),便于處理更多的圖像故障。
[1]劉瑞禎,于仕琪.OpenCV 教程[M].北京:北京航空航天大學(xué)出版社,2007.
[2]GONZALEZ R C.數(shù)字圖像處理[M].北京:電子工業(yè)出版社,2003.
[3]章毓晉.圖像處理和分析[M].北京:清華大學(xué)出版社,1999。
[4]陸系群,陳純.圖像處理原理技術(shù)與方法[M].杭州:浙江大學(xué)出版社,2001.
[5]姚敏.數(shù)字圖像處理[M].北京:機(jī)械工業(yè)出版社,2006.
[6]徐利華,陳早生.二值圖像中的游程編碼區(qū)域標(biāo)記[J].光電工程,2004,6(31):63-65.