馬仁杰
淮北師范大學(xué)物理與電子信息學(xué)院,安徽,淮北,235000
圖像目標(biāo)識(shí)別與檢測(cè),在模式識(shí)別領(lǐng)域中應(yīng)用廣泛,尤其在計(jì)算機(jī)視覺(jué)領(lǐng)域中有著重要的應(yīng)用。目標(biāo)識(shí)別的主要任務(wù)是在一幅圖像中確定某類(lèi)目標(biāo)是否存在,而目標(biāo)檢測(cè)的主要任務(wù)是確定圖像中目標(biāo)的位置,在光電成像觀測(cè)任務(wù)中,目標(biāo)識(shí)別和檢測(cè)是其中的一個(gè)重要環(huán)節(jié),對(duì)目標(biāo)快速準(zhǔn)確地識(shí)別和檢測(cè)不僅可以為跟蹤任務(wù)提供保障,而且也能為系統(tǒng)的決策提供支持。
本文基于第四屆安徽省大學(xué)生光電設(shè)計(jì)競(jìng)賽,利用MATLAB設(shè)計(jì)圖像處理軟件,只需進(jìn)行傻瓜式操作即可實(shí)現(xiàn)對(duì)CMOS相機(jī)采集的比賽圖像進(jìn)行缺口識(shí)別,缺口像素?cái)?shù)顯示在缺口位置處,其中的圖像識(shí)別與檢測(cè)算法設(shè)計(jì)方法、圖像處理軟件設(shè)計(jì)具有代表性,也可用于其他相似類(lèi)型的圖像處理。
圖像目標(biāo)的識(shí)別與檢測(cè)是圖像處理領(lǐng)域研究最多的課題之一,圖像識(shí)別的發(fā)展經(jīng)歷了文字識(shí)別、數(shù)字圖像處理與識(shí)別、物體識(shí)別三個(gè)發(fā)展階段。文字識(shí)別一般指的是識(shí)別字母、數(shù)字和符號(hào),常見(jiàn)應(yīng)用包括拍照識(shí)別、文檔檢索。數(shù)字圖像與模擬圖像相比更易存儲(chǔ)、可壓縮傳輸更方便等優(yōu)勢(shì),這些巨大優(yōu)勢(shì)促進(jìn)了數(shù)字圖像處理技術(shù)的迅速發(fā)展,廣泛應(yīng)用于軍事刑偵、機(jī)器視覺(jué)等領(lǐng)域。物體識(shí)別始于20世紀(jì)50年代,包括物體的定位與分類(lèi),應(yīng)用于商品識(shí)別、車(chē)輛識(shí)別等。自從2012年利用卷積神經(jīng)網(wǎng)絡(luò)搭建的AlexNet取得了巨大成功,各種目標(biāo)檢測(cè)算法模型便隨之井噴式增長(zhǎng),圖像深度學(xué)習(xí)算法相比于傳統(tǒng)識(shí)別方法,可以提取更深層次的圖像特征,在海量數(shù)據(jù)的支持下,深度學(xué)習(xí)算法學(xué)習(xí)到的模型表達(dá)能力更強(qiáng),也更加有效,對(duì)圖像處理的精度與速度的提升具有重要意義。
背景介紹:MATLAB中文意為矩陣實(shí)驗(yàn)室,是美國(guó)MathWorks公司出品的一款以數(shù)學(xué)計(jì)算為主的高級(jí)編程軟件,由于MATLAB語(yǔ)言在復(fù)雜的數(shù)值分析、矩陣運(yùn)算、信號(hào)處理等方面具有明顯的優(yōu)勢(shì),故在制作需要對(duì)大量數(shù)據(jù)進(jìn)行各種運(yùn)算和處理的軟件時(shí),在GUI中利用MATLAB語(yǔ)言編寫(xiě)程序是一個(gè)很好的選擇[1],具有眾多突出優(yōu)點(diǎn),已成為科研工作人員進(jìn)行科學(xué)研究的有力工具。
MATLAB使用包含兩個(gè)部分:核心部分和各種可選的工具箱。核心部分中擁有眾多內(nèi)部功能函數(shù),工具箱主要包括功能性工具箱和學(xué)科性工具箱兩大類(lèi)。本實(shí)驗(yàn)利用MATLAB中GUI組件、通過(guò)算法集成、采用底層代碼,實(shí)現(xiàn)了圖像簡(jiǎn)單處理、圖像變換等能夠與用戶交互、圖像處理過(guò)程可視化的功能[2],MATLAB采用的是一種腳本式的解釋性語(yǔ)言,基本的語(yǔ)言環(huán)境中由于包含了成千上萬(wàn)的功能函數(shù),極大地提高了用戶的編程效率,并且它以數(shù)組為基本計(jì)算單元,語(yǔ)法規(guī)則簡(jiǎn)單,不需要任何類(lèi)型聲明,運(yùn)行時(shí),只需點(diǎn)擊一下運(yùn)行鍵,系統(tǒng)一次性即可完成編譯、鏈接和運(yùn)行工作。
在MATLAB中,通過(guò)imread函數(shù)可以將已采集的bmp圖像讀取后放入一個(gè)三維矩陣(由三個(gè)二維矩陣組成),分別存放圖片中的RGB三個(gè)色彩,再將RGB圖像數(shù)據(jù)類(lèi)型轉(zhuǎn)換為雙精度方便后續(xù)的閾值處理,figure(1)用于作圖,imshow(I)用于將矩陣代表的圖像顯示在窗口上,并用title函數(shù)為已經(jīng)顯示的圖片加標(biāo)題[3]。MATLAB讀取的圖像如圖1所示。

圖1 讀入的圖像
圖像在獲取的過(guò)程中,由于成像系統(tǒng)和目標(biāo)物并非完全固定不變,其稍微位置變化就可能會(huì)引起采集的圖像中目標(biāo)檢測(cè)區(qū)域的扭曲、比例失調(diào)等圖像退化現(xiàn)象(幾何失真/畸變),因此有必要通過(guò)校正圖像目標(biāo)區(qū)域以增加缺口檢測(cè)的準(zhǔn)確性、后續(xù)目標(biāo)檢測(cè)算法的魯棒性。解決這種幾何失真問(wèn)題的方法叫幾何校正,幾何校正先對(duì)圖像進(jìn)行幾何變換,使像素變換到正確位置上,然后需要重新確定新像素的灰度值[4]。在本次實(shí)驗(yàn)中,可根據(jù)白色單像素正方形的RGB值均為1的特點(diǎn),利用斜率公式求出白色單像素正方形整體需要旋轉(zhuǎn)的角度及方向,并使用MATLAB中自帶的imrotate函數(shù)、imwarp函數(shù),采用雙線性插值法即可使得圖像幾何校正的同時(shí)減小其失真,如圖2所示。

圖2 校正圖
(1)圖像二值化。為方便正方形缺口檢測(cè),需要將灰度圖通過(guò)閾值分割轉(zhuǎn)化為二值化圖,利用圖像二值化對(duì)圖像特征進(jìn)行提取[5],將灰度圖變?yōu)楹诎讍蜗袼貓D后,不僅可以讓圖像目標(biāo)區(qū)域輪廓凸顯,而且可以減少檢測(cè)中的巨大運(yùn)算量。閾值的選取是否合適很大程度上決定了二值化效果的好壞,閾值法計(jì)算簡(jiǎn)單,具有較高的運(yùn)算效率,是圖像分割中廣泛采用的方法,主要分為全局閾值法和局部閾值法[6],本文采用全局閾值法,閾值就相當(dāng)于黑白像素的分界線,低于閾值的像素點(diǎn)設(shè)置為0值,高于閾值的像素點(diǎn)設(shè)置為1值,且0值對(duì)應(yīng)黑色,1值對(duì)應(yīng)白色。閾值分割實(shí)現(xiàn)主要分為兩類(lèi):①通過(guò)人工選擇閾值分割圖像;②自動(dòng)選擇閾值進(jìn)行分割。通過(guò)多次對(duì)比測(cè)試表明,人工選擇閾值法更加適合該類(lèi)圖像,并通過(guò)大量數(shù)據(jù)測(cè)試結(jié)果表明,當(dāng)閾值選取為0.754時(shí),缺口的識(shí)別檢測(cè)最有效和準(zhǔn)確,二值化校正后如圖3所示。

圖3 二值化校正圖
(2)圖像濾波。圖像濾波的一個(gè)重要目的就是在盡量維持圖像的細(xì)節(jié)特征前提下對(duì)圖像的噪聲進(jìn)行抑制,由于圖像噪聲的影響難以避免,因此幾乎任何圖像處理都離不開(kāi)圖像濾波,而針對(duì)不同噪聲需要對(duì)應(yīng)不同的濾波方式,濾波方式主要分為時(shí)域去噪和頻域去噪。時(shí)域去噪即通過(guò)IIR或FIR濾波,其代表方法有加權(quán)平滑法、中值濾波、二值形態(tài)學(xué)法等;頻域去噪即先通過(guò)快速傅里葉變換去除噪聲再逆快速傅里葉變換,其代表方法有經(jīng)典數(shù)字濾波器、同態(tài)濾波、小波分析等。經(jīng)過(guò)分析比較,本文采用中值濾波法,它不僅具有抑制干擾脈沖和點(diǎn)狀噪聲的作用,而且可保持較好的圖像邊緣,在MATLAB里自帶的中值濾波函數(shù)是medfilt[7],濾波前如圖4,濾波后如圖5所示。

圖4 濾波前

圖5 中值濾波后
(1)霍夫直線檢測(cè)。霍夫變換是一種非常重要的特征提取手段,在圖像處理中不可或缺,而直線、矩形、圓的識(shí)別又是圖形識(shí)別的基礎(chǔ)[8],可用其提取各種形狀邊界,常用于車(chē)道線檢測(cè)、車(chē)牌檢測(cè)等場(chǎng)合。霍夫變換其實(shí)就是把一條線的邊界用點(diǎn)來(lái)表達(dá),二值化圖像上的一點(diǎn)都有可能是候選直線集合的組成,將圖像空間中的直線轉(zhuǎn)換到參數(shù)空間(極坐標(biāo)系)中的點(diǎn)后通過(guò)執(zhí)行投票方法找出最多正弦曲線數(shù)通過(guò)的一點(diǎn)(r,θ),此時(shí),所得到的(r,θ)即為所求的直線極坐標(biāo)參數(shù)。本文采用經(jīng)典霍夫變換進(jìn)行白色單像素正方形四邊直線的檢測(cè),并采用白色方形框標(biāo)記出峰值點(diǎn),霍夫直線檢測(cè)中核心語(yǔ)句一為:
Peaks=houghpeaks(H,4,‘threshold',ceil(0.3*max(H(:))));
式中,H是指霍夫變換后的矩陣,4表示在H矩陣中設(shè)置4個(gè)峰值點(diǎn),‘threshold'是指極值點(diǎn)若低于0.3*max(H(:)),其像素不會(huì)被考慮,如圖6所示。

圖6 直線檢測(cè)參數(shù)空間圖
霍夫直線檢測(cè)中另一核心語(yǔ)句為:
lines=houghlines(I,T,R,P,'FillGap',1,'MinLeng th',15);
式中,lines指結(jié)構(gòu)體數(shù)組,其長(zhǎng)度是找到的直線的條數(shù),而每個(gè)數(shù)組元素包含四個(gè)部分。I為讀取的圖片,T和R分別是對(duì)應(yīng)變換過(guò)來(lái)的極坐標(biāo)(r,θ)中的角度θ和半徑值r。P是峰值,F(xiàn)illGap表示模式,1表示同一幅圖像中同一方向兩條直線的距離的閾值,小于閾值則視為一條直線,MinLength是一個(gè)正實(shí)數(shù),用來(lái)確定是否保存線條。如果線條長(zhǎng)度小于15像素,線條將會(huì)被擦除,否則就保存下來(lái)。
(2)霍夫直線標(biāo)記。通過(guò)霍夫直線檢測(cè)可以找到數(shù)條滿足預(yù)定條件的線段,將已經(jīng)檢測(cè)出的一些線段的兩端端點(diǎn)分別用藍(lán)色和紅色的圓點(diǎn)表示,用plot函數(shù)將每條線段兩端點(diǎn)連接即可得到線段,這些線段用綠色標(biāo)記,又由賽題知:正方形每條邊長(zhǎng)度為1000像素,分為7個(gè)區(qū)域,如圖7所示。

圖7 每條邊的區(qū)域分割
其中1,3,5,7大小為100像素,2,4,6大小為200像素,缺口出現(xiàn)在2,4,6區(qū)域中,每個(gè)區(qū)域有且只有1個(gè)缺口,每條邊3個(gè)缺口,目標(biāo)物中一共12個(gè)缺口。缺口像素?cái)?shù)的選定:從0~12共13個(gè)數(shù)字中隨機(jī)挑選12個(gè)數(shù)字作為缺口像素?cái)?shù),如缺口像素?cái)?shù)為0,則圖中不會(huì)出現(xiàn)缺口,但仍認(rèn)作有缺口,缺口像素?cái)?shù)為0,每個(gè)數(shù)字至多只出現(xiàn)1次。由此可知,若霍夫直線檢測(cè)出的所有線段中某一邊只識(shí)別出了兩個(gè)缺口且該邊出現(xiàn)了圖像里最長(zhǎng)線段,則該線段中點(diǎn)是缺口像素?cái)?shù)0的可能性最大,因此可以直接將其標(biāo)記為0,該線段標(biāo)記為紅色,如圖8所示。

圖8 霍夫直線標(biāo)記圖
(1)缺口大小檢測(cè)。經(jīng)霍夫直線檢測(cè)后已得所有線段的端點(diǎn)坐標(biāo)值,將同一方向相鄰端點(diǎn)距離求出即為該缺口大小,需要注意缺口像素?cái)?shù)是從0~12中的13個(gè)數(shù)字中隨機(jī)挑選12個(gè)數(shù)字,每條邊最多出現(xiàn)3個(gè)缺口,由于評(píng)分細(xì)則中有“根據(jù)判斷圖像缺口像素?cái)?shù)是否正確給分,答對(duì)得3分,不答得0分,答錯(cuò)扣1分”,因此,寧可少檢測(cè)出一個(gè)缺口大小也不能多檢測(cè)出一個(gè)錯(cuò)誤缺口大小,盡量提高分?jǐn)?shù)。根據(jù)組委會(huì)圖片缺口識(shí)別檢測(cè)結(jié)果,通過(guò)橫向、縱向放大對(duì)比數(shù)十幅圖像中共計(jì)上百個(gè)缺口形態(tài)特征(根據(jù)已標(biāo)記的紅色/藍(lán)色端點(diǎn)前后左右黑白像素點(diǎn)的分布情況)可以將其將其劃分為數(shù)種典型缺口特征,如圖9所示,針對(duì)這些典型缺口特征,可以充分發(fā)揮出程序模塊化的優(yōu)勢(shì):不但便于程序結(jié)構(gòu)的劃分和編程設(shè)計(jì)的分工,還能增加程序可移植性和加快設(shè)計(jì)的速度[9]。根據(jù)每種典型缺口特征并對(duì)照其標(biāo)準(zhǔn)缺口大小設(shè)置相應(yīng)if-end語(yǔ)句以將缺口檢測(cè)結(jié)果進(jìn)行相應(yīng)處理,如加上1像素或減去1像素等情況,即利用大量樣本通過(guò)人工提取目標(biāo)特征來(lái)提高缺口檢測(cè)準(zhǔn)確率。

圖9 典型缺口特征示例
(2)缺口大小標(biāo)記。缺口檢測(cè)完畢后需要針對(duì)這些缺口進(jìn)行選擇性標(biāo)記,不合賽規(guī)的缺口不予標(biāo)記,但檢測(cè)出來(lái)的缺口,其中線段端點(diǎn)到四個(gè)拐角點(diǎn)的距離小于80將不予顯示,此外,還需要將檢測(cè)出來(lái)的缺口大小與答案庫(kù)(0~12其中的12個(gè)數(shù)字)對(duì)照,若不在答案庫(kù)中則一定不予顯示,最后用text函數(shù)將所有符合條件的缺口標(biāo)記出來(lái),結(jié)果如圖10(a)所示,組委會(huì)官方正確標(biāo)記圖如圖10(b)所示。

圖10 標(biāo)記圖

GUI譯為圖形用戶界面(Graphical User Interface),又叫作圖形用戶接口,是用圖形化方式顯示的可視化計(jì)算機(jī)操作用戶界面,人機(jī)交互界面是人與控制器終端進(jìn)行通話的主要通道,一個(gè)較復(fù)雜的控制系統(tǒng)往往需要進(jìn)行人機(jī)界面的設(shè)計(jì)[10]。根據(jù)競(jìng)賽要求知,圖像處理軟件界面必須包括“開(kāi)始”按鈕、“打開(kāi)”按鈕,打開(kāi)MATLAB自帶的軟件設(shè)計(jì)工具箱后,在設(shè)計(jì)視圖中進(jìn)行組件的設(shè)置布局,設(shè)計(jì)視圖如圖11所示。

圖11 設(shè)計(jì)視圖
然后在代碼視圖的回調(diào)函數(shù)中插入相應(yīng)組件的功能代碼,實(shí)現(xiàn)功能如點(diǎn)擊“打開(kāi)”按鈕后彈出FileOpen 對(duì)話框,選擇保存的圖片進(jìn)行處理。軟件完成競(jìng)賽內(nèi)容后,要求彈出消息框進(jìn)行提示,并保存數(shù)字圖像文件。數(shù)字圖像文件以校名+隊(duì)名命名。在生成圖像中間的時(shí)間標(biāo)識(shí)的下方加入學(xué)校的校名+隊(duì)名+參賽隊(duì)員的姓名等標(biāo)記,保存目錄為圖像處理軟件同級(jí)文件夾,代碼視圖如圖12所示。

圖12 代碼視圖
先進(jìn)行APP運(yùn)行測(cè)試;GUI設(shè)計(jì)完畢利用組委會(huì)提供的測(cè)試圖片進(jìn)行測(cè)試,再打包APP應(yīng)用;在程序運(yùn)行成功后,將程序打包為一個(gè)可脫離MATLAB軟件的獨(dú)立可執(zhí)行exe文件,既保護(hù)源代碼又便于用戶傻瓜式操作。打開(kāi)設(shè)計(jì)好的軟件,點(diǎn)擊用戶界面“載入圖片”鍵后再點(diǎn)擊“缺口檢測(cè)”鍵即可實(shí)現(xiàn)對(duì)采集圖片的缺口檢測(cè),如圖13所示。

圖13 圖像處理軟件界面
圖像缺口檢測(cè)軟件設(shè)計(jì)基于MATLAB平臺(tái),針對(duì)CMOS相機(jī)所采集的RGB圖像,通過(guò)三大步驟即圖像預(yù)處理、目標(biāo)識(shí)別與檢測(cè)、GUI設(shè)計(jì)實(shí)現(xiàn)軟件主體設(shè)計(jì)。實(shí)驗(yàn)結(jié)果表明:(1)該自行設(shè)計(jì)的圖像處理軟件性能較為優(yōu)越,對(duì)組委會(huì)提供的同一類(lèi)型圖像缺口的識(shí)別率在90%以上,圖像缺口大小檢測(cè)正確率在70%以上,綜合評(píng)分在全省各校共計(jì)四十余支隊(duì)伍中名列第五。(2)人工提取圖像目標(biāo)特征耗時(shí)費(fèi)力,難以將待檢測(cè)目標(biāo)和干擾噪聲準(zhǔn)確區(qū)分,在圖像二值化確定閾值、歸類(lèi)圖像典型缺口特征時(shí),如果使用基于深度學(xué)習(xí)的目標(biāo)識(shí)別算法則可以自動(dòng)且準(zhǔn)確地提取特征,解放人力,將卷積神經(jīng)網(wǎng)絡(luò)模型運(yùn)用于圖像特征識(shí)別將是筆者今后關(guān)注并學(xué)習(xí)的一大方向。