張啟軒,袁明輝
(上海理工大學光電信息與計算機工程學院,上海 200093)
如今,安全已成為社會各行各業(yè)首要關(guān)注的問題,尤其在人流密集且流動性大的場所,安全保障尤為重要,如飛機場、火車站、汽車站、地鐵站等。為了保證安全,防止乘客攜帶易燃易爆等違禁物品[1],太赫茲安檢系統(tǒng)發(fā)揮著重要作用。太赫茲安檢系統(tǒng)是基于太赫茲成像技術(shù)構(gòu)建的,太赫茲成像以太赫茲波(0.1~10THz)為信號源[2]。太赫茲(Terahertz)波是一種新的、介于毫米波與紅外光之間的輻射源,具有光子能量低、載波頻率高等優(yōu)點[3],因此相比傳統(tǒng)的X 射線安檢儀,大大降低了射線對人體的傷害[4-5]。另外,太赫茲波處在特殊波段,對許多電介質(zhì)和非極性物質(zhì),如塑料、陶瓷、紙張、布料等具有良好的穿透性,可用于此類材料的隱蔽物檢測,彌補了X 射線檢測的不足[2],因此在安檢領(lǐng)域得到了廣泛應用。
雖然太赫茲波檢測有著X 射線檢測沒有的優(yōu)點,但太赫茲圖像質(zhì)量會受到太赫茲安檢系統(tǒng)硬件及外界環(huán)境的影響,使得檢測的圖像質(zhì)量降低,圖像背景噪點多[3,5]。對于人體這一檢測目標來說,要想檢測出人體異物并構(gòu)建完整的人體輪廓,除對硬件系統(tǒng)要求較高外,還要對采集的圖像進行后期處理。張馨等[6]采用Lucy-Richardson 算法、針孔像分析法、閾值分割和邊緣檢測方法對掃描圖像進行圖像重構(gòu),以提高圖像質(zhì)量以及對圖像目標的分辨能力。目前國內(nèi)外研究主要針對目標物內(nèi)部缺陷檢測,而針對物體邊緣輪廓缺陷檢測并繪制完整物體輪廓的相關(guān)研究很少,基于OpenCV 庫的C++語言算法進行人體邊緣缺陷識別的研究更是寥寥無幾。本文基于現(xiàn)有的OpenCV 計算機視覺庫,其具有開源、輕量化、高效等優(yōu)點,同時OpenCV 由C++語言編寫[7],主要接口也是C++,易讀性強,工程兼容性好,此外還提供了Python、MATLAB 等語言接口,使得算法可移植性強,能在Linux、Windows、Android 等操作系統(tǒng)上運行。根據(jù)OpenCV 提供的視覺算法,本文提出一套完整的圖像處理算法體系,通過對太赫茲安檢系統(tǒng)采集的圖像進行預處理,檢測人體邊緣缺陷并繪制完整輪廓,以提高圖像質(zhì)量和檢測準確率。
圖像預處理是對采集的圖像正式處理前進行的一種處理,主要目的是消除圖像中的無關(guān)信息,如背景噪聲等,并增強有用信息特征,以便于特征提取,提高識別和匹配度。圖1 為掃描系統(tǒng)采集的原始人體圖像,人體右腿分別綁有兩塊異物G。從圖像上可以看出,異物邊緣位于人體邊緣上,并且與背景連通,使得異物邊緣與人體邊緣在識別上存在難度,即很難分辨人體邊緣是否存在異物。
對采集的原始圖像首先進行灰度處理,然后進行閾值分割實現(xiàn)圖像二值化處理,采用大津閾值處理法(OSTU),如圖2 所示。圖像二值化處理是指將圖像上的每個像素點根據(jù)閾值分割設(shè)定合適的閾值,將低于該閾值的像素點全部設(shè)為黑,將高于該閾值的像素點全部設(shè)為白。通過圖像的二值化處理,可使原始圖像特征點突出,將人體輪廓從背景中分離出來[8],并能大幅減少后期圖像處理數(shù)據(jù)。盡管經(jīng)過OSTU 處理后的人體輪廓從背景中分離了出來,且更加清晰,但是人體邊緣輪廓細節(jié)有所缺失,呈現(xiàn)為不連續(xù)性輪廓,異物邊緣也不太清晰,人體內(nèi)部噪點也被保留了下來,使得在分辨人體異物G 時出現(xiàn)了嚴重干擾。
因此經(jīng)過二值化處理以后,要對圖像進行小孔洞填充/小區(qū)域去除,以減少特征數(shù)量,避免與目標特征沖突。本文采用區(qū)域生長法與四鄰域探測方法[9],相比八鄰域,四鄰域探測范圍減小,可以更好地消除小孔洞,避免因過度消除導致目標特征也被填充[7]。本文采用OpenCV 庫中的RemoveSmallRegion 算法,小孔洞填充后的二值化圖像如圖3 所示。相比圖2,圖3 的人體邊緣輪廓更加清晰,且具有較好的連續(xù)性,人體內(nèi)部的小孔洞也減少了很多,右腿的異物輪廓也更加清晰明了。
Fig.1 Acquisition of the original image圖1 采集原始圖像
Fig.2 Binarization processing effect圖2 二值化處理效果
形態(tài)學處理還包括腐蝕、膨脹等算法[10-12],通過合理運用形態(tài)學處理算法,可進一步提高圖像質(zhì)量。經(jīng)過二值化、小孔洞填充后,雖然人體邊緣輪廓有了很大改善,但仍然存在背景噪聲,人體邊緣有明顯毛刺,這些毛刺可能會在之后的人體邊緣缺陷識別中被誤認為特征點,從而影響識別準確性。開運算是指先腐蝕后膨脹,如公式(1)所示。
開運算算法具有消除灰度值較高的小區(qū)域,把連在一起的兩區(qū)域分開的功能,對于較大物體,能夠在基本不改變其面積的情況下平滑邊界。閉運算是指先膨脹后腐蝕,如公式(2)所示。
閉運算算法能夠填充物體內(nèi)部的小空洞區(qū)域,連接相鄰區(qū)域[10-16]。經(jīng)膨脹算法處理后,可去除人體內(nèi)部孔洞,如圖4 所示。
Fig.3 Binarization treatment effect of small hole filling圖3 小孔洞填充二值化處理效果
Fig.4 Processing effect of expansion algorithm圖4 膨脹算法處理效果
但是人體異物膨脹后顯得不清晰,背景噪聲也被放大;反之,經(jīng)過腐蝕算法處理后的圖像如圖5 所示,腐蝕處理可將人體異物邊緣剝離出來,消除人體邊緣的毛刺,使得邊緣輪廓銳化。合理使用開閉運算及其使用次數(shù)可以有效改善圖像質(zhì)量,本文通過一次閉運算和開運算,極大地提高了圖像質(zhì)量,消除了毛刺和背景噪聲,突出了目標特征,如圖6 所示。
Fig.5 Corrosion algorithm processing effect圖5 腐蝕算法處理效果
Fig.6 Image effect after closing operation圖6 閉開運算后圖像效果
人體邊緣輪廓的缺陷識別可采用邊緣輪廓角點檢測方法實現(xiàn)[17-19],物體在人體邊緣,經(jīng)過圖像掃描呈現(xiàn)出物體角點與人體邊緣輪廓重疊,因此根據(jù)預先設(shè)定好的符合物體直徑的閾值,檢測出符合物體直徑的兩個角點,再對兩個角點進行連線,即可完成對人體邊緣缺陷的識別。為了檢測到符合閾值設(shè)定的物體兩個角點,需要遍歷人體邊緣輪廓上的所有角點,記錄每個角點的像素信息。檢測角點前要先掃描出人體邊緣輪廓,使得人體邊緣輪廓的角點特征突出。一幅圖像上有很多像素,每個像素都有自己明確的位置,即像素坐標。經(jīng)過二值化處理后的圖像,每個像素色彩值只有0 和255,因此呈現(xiàn)出黑白交替的效果。當圖像在各個方向上有明顯的灰度變化時,該處即為角點。角點檢測即利用一個固定尺寸的區(qū)域窗口模型在圖像上進行滑動掃描,比較滑動掃描前后灰度值的梯度變化,若在該點處梯度變化較大,則認為在該點處存在角點。當一個窗口在圖像各個方向上移動時,如圖7 所示,窗口在任意方向上沒有灰度變化,則認為該區(qū)域平滑,不存在角點;當窗口移動到邊緣輪廓上時,如圖8 所示,其中邊緣方向不存在灰度變化,則認為此處為邊緣輪廓;當窗口移動到邊緣輪廓角點上時,窗口各個方向存在較大的灰度值變化,則確定該點為角點[20],如圖9 所示。
當窗口發(fā)生[u,v]移動時,滑動前后產(chǎn)生的灰度變化為E(u,v),如式(3)所示。
其中,[u,v]是窗口w 的偏移量,代表窗口移動距離,(x,y)是窗口w 對應的像素坐標位置,I(x,y)是像素坐標(x,y)的灰度值。通過對4 個方向進行加權(quán)求和確定灰度變化大小,根據(jù)設(shè)定的閾值進一步確定角點。在角點檢測前,還要先對圖像進行平滑處理,因為經(jīng)過閉開運算后,圖像邊緣輪廓更加清晰,同時也使非物體邊緣的特征角點突出。經(jīng)過一次平滑處理后,使得極小的角點被平滑掉,減少了特征角點,為篩選物體角點減小了干擾項。平滑一次后的圖像效果如圖10 所示。
Fig.7 Smooth area圖7 平滑區(qū)域
Fig.8 Edge area圖8 邊緣區(qū)域
Fig.9 Corner area圖9 角點區(qū)域
使用C++語言創(chuàng)建vector<Point2f>corners 二維數(shù)組,用來保存邊緣輪廓上的角點精確坐標。通過角點檢測算法將檢測的角點信息存儲在二維數(shù)組中,利用circle 語句將檢測到的角點全部標注在人體輪廓上,如圖11 所示,角點坐標信息如圖12 所示。通過遍歷人體輪廓,檢測到特征突出的角點個數(shù)為73 個,其中包含物體G 的角點信息。
Fig.10 Image effect after smoothing once圖10 平滑一次后圖像效果
Fig.11 Corner annotation圖11 角點標注
Fig.12 Corner coordinate information圖12 角點坐標信息
提取邊緣輪廓所有角點坐標,為了在眾多角點中定位到物體G 邊緣的兩個特征角點并將其連線,繪制完整的人體輪廓,本文采用迭代方法。分別定義兩個變量p、q 代表任意兩個角點坐標,p=(corners[i].x,corners[i].y),q=(corners[j].x,corners[j].y)。坐標corners[i].()表示第i個角點坐標為(x,y),同理,corners[j].()表示第j個角點坐標為(x,y)。一個物體兩個角點的直線距離是固定的,因此兩直線之間距離的平方和為D2=p2+q2。通過循環(huán)嵌套語句遍歷每一個角點坐標,將第一個角點坐標設(shè)為起始坐標,即p=(corners[1].x,corners[1].y),i=1,以此類推:(x1,y1),(x2,y2),(x3,y3)…(xi-2,yi-2),(xi-1,yi-1),(xi,yi)。此時第一個角點坐標將在循環(huán)語句中依次與第二個角點坐標、第三個角點坐標……第j個角點坐標進行距離平方和Dij2的計算,這里的j將從第二個角點坐標開始計數(shù),如式(4)所示。遍歷人體邊緣輪廓所有角點,根據(jù)推導公式計算任意兩個角點的直線距離平方和D2,分別見式(5)-式(7)。
對物體G 兩個角點的直線距離平方和D2設(shè)定合適的閾值范圍,符合該閾值的角點坐標則被保留下來,即物體G的兩個特征角點坐標。利用line 語句對保留的兩個角點坐標進行線連接,如圖13 所示。本次實驗共采集了115張圖片用于算法驗證,實驗結(jié)果表明,該算法對115 張圖片的誤判率在2.2% 以下,并能去除99% 以上的圖片背景噪聲,說明該算法應用于物體邊緣缺陷識別是完全可行的。
Fig.13 The connection effect of characteristic corner points meeting the threshold圖13 滿足閾值的特征角點連線效果
本文提出一種基于OpenCV 與C++的物體圖像邊緣缺陷識別算法。首先對原始掃描圖像進行二值化、小孔洞填充,并進行初步降噪,填充了人體內(nèi)部的極小孔洞,消除了對人體異物檢測的干擾。經(jīng)過二值化處理后,人體邊緣輪廓更加清晰,邊緣輪廓的連續(xù)性得到改善,異物邊緣輪廓更加突出。通過的先膨脹腐蝕、后腐蝕膨脹的兩次形態(tài)學處理,消除了二值圖像的邊緣毛刺以及人體內(nèi)部和背景噪點,使人體邊緣輪廓更具有連續(xù)性,突出了目標特征。經(jīng)過形態(tài)學處理后,雖然邊緣輪廓更加清晰明了,但也使物體G 以外的邊緣特征角點突出,通過平滑處理可使極小的角點被平滑掉,減少了特征角點,為篩選物體G 的角點減少了干擾項。之后遍歷邊緣輪廓所有角點,記錄并保存角點坐標。最后迭代計算所有角點之間的距離平方和,根據(jù)設(shè)置好的閾值進行物體G 的角點篩選,并對其進行連線,繪制完整的人體輪廓。
本文通過對物體圖像邊緣缺陷的研究,得出了當物體圖像邊緣存在缺陷時的特征規(guī)律。由于缺陷的存在,該點處灰度值產(chǎn)生了很大的梯度變化,所以對邊緣輪廓角點檢測的研究,對于未來物體圖像邊緣缺陷識別與輪廓擬合等相關(guān)研究具有重要意義。