潘俊洋PAN Jun-yang 項(xiàng)輝宇 - 薛 真
(北京工商大學(xué)材料與機(jī)械工程學(xué)院,北京 100048)
芒果的品質(zhì)主要由其大小、成熟度、腐壞程度決定,而且成熟的芒果更易腐爛,并極易造成周圍芒果的共同腐爛。近年來,隨著人工智能的不斷發(fā)展,視覺檢測技術(shù)使芒果的無損檢測得以實(shí)現(xiàn)。劉靜等[1]通過面積獲取,利用線性回歸分析確定測量值和真實(shí)值之間的相關(guān)性,以此進(jìn)行芒果表面缺陷的分級。李甦等[2]通過大量統(tǒng)計(jì)水果表面顏色的分布規(guī)律提出了“數(shù)量—程度”“大小—評價(jià)測光值”2種空間模型來實(shí)現(xiàn)缺陷檢測和分級??抵玖恋萚3]利用微處理器結(jié)合可見光/近紅外漫反射原理進(jìn)行數(shù)據(jù)的處理和分析,以此來對蘋果是否受損進(jìn)行識別和分類。趙杰文等[4]利用高光譜圖像技術(shù),提取547 nm波長下的圖像,并通過不均勻二次差分和圖像處理技術(shù)檢測蘋果表面損傷,正確率達(dá)到88.57%。但上述方法對試驗(yàn)環(huán)境和設(shè)備要求較高,速度不夠高,不利于實(shí)際生產(chǎn)流水線上的檢測。黨宏社等[5]提出了運(yùn)用ARM嵌入式技術(shù)對芒果進(jìn)行檢測和分級,但仍未能脫離對現(xiàn)有QT/ Embedded軟件平臺的依賴,并且只能做到對尺寸的檢測分級。本試驗(yàn)基于DSP開發(fā)板構(gòu)建檢測平臺,對芒果品質(zhì)進(jìn)行視覺的檢測,同時(shí)將味覺傳感器與視覺檢測相結(jié)合,為芒果及類似的水果檢測提供一種較好的方法。
1.1.1 DSP6437開發(fā)板 與PC產(chǎn)品相比,DSP系統(tǒng)集成度更高,速度更快,功耗更小。其強(qiáng)大的數(shù)學(xué)運(yùn)算能力使得實(shí)時(shí)圖像處理得以更好實(shí)現(xiàn)?;谶_(dá)芬奇三代的架構(gòu)的DM6437,專門適用于對數(shù)字視頻、圖像采樣處理、視覺分析等應(yīng)用進(jìn)行剪裁和優(yōu)化。并且美國TI公司的DSP支持匯編語言、ANSI的標(biāo)準(zhǔn)C語言,應(yīng)用范圍更廣。
1.1.2 傳送帶 將芒果放在傳送帶上進(jìn)行運(yùn)輸,模擬生產(chǎn)輸送中的流水線作業(yè)。為了觸發(fā)CCD相機(jī)進(jìn)行一幀圖像的獲取,選用M12激光傳感器,當(dāng)芒果傳送到傳感器處,觸發(fā)程序進(jìn)行圖像捕捉、處理。
1.1.3 氣味檢測傳感器 本試驗(yàn)選擇的QS-01傳感器是一種新型的二氧化錫半導(dǎo)體氣體傳感器,不僅響應(yīng)時(shí)間短,而且對腐爛所產(chǎn)生的硫化氫等異味氣體有著很高的靈敏度。傳感器采用塑料作為外殼,可以在極低的功耗下獲得極好的感應(yīng)特性,和51單片機(jī)的ADC模塊結(jié)合使用,檢測準(zhǔn)確。
1. DSP6437開發(fā)板 2. 傳送帶 3. 顯示屏 4. M12激光傳感器 5. CCD 6. 51單片機(jī) 7. QS-01氣味傳感器
圖1 試驗(yàn)檢測平臺
Figure 1 Experimental platform
本試驗(yàn)搭建的檢測平臺,將OpenCV圖像處理算法移植于DSP中,并與DSP快速的數(shù)據(jù)處理速度相結(jié)合。通過CCD采集圖像信號,經(jīng)過解碼器TVP5150轉(zhuǎn)換成格式為YUV422的8-bit數(shù)字信號,調(diào)用VLIB庫函數(shù)將其轉(zhuǎn)換為常用的RGB格式,存儲在片外存儲空間DDR2中。篩選獲取包含芒果的矩形連通區(qū)域,將感興趣區(qū)域灰度化,以其均值判斷成熟度。為了極大保護(hù)圖像細(xì)節(jié)優(yōu)化后續(xù)處理,采用超限領(lǐng)域平均法進(jìn)行平滑濾波。運(yùn)用二值化進(jìn)行圖像分割,二階微分拉普拉斯算法計(jì)算芒果邊緣,通過直方圖統(tǒng)計(jì)腐爛區(qū)域大小,并將氣味傳感器綜合檢測判斷腐爛與否,相較于單一的視覺檢測更為準(zhǔn)確。試驗(yàn)流程見圖2。
基于DSP6437搭建芒果品質(zhì)檢測平臺,關(guān)鍵技術(shù)包括EMCV移植、視頻圖像處理及平臺算法優(yōu)化。
DM6437目前只支持美國TI公司提供的VLIB和IMGLIB視頻圖像處理算法庫,但這2個(gè)庫僅提供了很少量的基本圖像算法,遠(yuǎn)不能支持一個(gè)完整全面的應(yīng)用算法開發(fā),并且在使用過程中有很多的限制。OpenCV擁有豐富的圖像處理算法,由一系列的C和C++編寫而成,并提供了多種其它語言形式(Python、Ruby)的函數(shù)接口,包含了機(jī)器視覺和視頻圖像處理領(lǐng)域的許多通用和高級算法。其移植性較強(qiáng),目前已有很多移植到ARM和DSP平臺的成功先例[6],選用OpenCV視覺庫進(jìn)行DSP環(huán)境移植方便可行。OpenCV總共有五大模塊,有些是不需要進(jìn)行移植的(例如Highgui圖像界面模塊),本次試驗(yàn)主要對OpenCV1進(jìn)行了DSP的移植,移植了CV(核心算法)和Cxcore(數(shù)據(jù)結(jié)構(gòu)支持)2個(gè)模塊(見圖3),在DSP中以EMCV的形式呈現(xiàn)。
由于YUV與RGB視頻信號相比,在傳輸過程中只需要占用極少的頻寬,所以多用于優(yōu)化的彩色視頻信號的傳輸。DSP中通過CCD捕捉到的圖像通常都通過YUV信號進(jìn)行傳輸,通過VPFE對CCD的各項(xiàng)參數(shù)進(jìn)行設(shè)定,調(diào)用vpfe_init獲取一幀圖像數(shù)據(jù)的首地址,調(diào)用VLIB_convertUYVYint_to_RGBp1(Uint8*)進(jìn)行YUV與RGB的轉(zhuǎn)換[7],便于圖像運(yùn)用算法進(jìn)行處理。
2.2.1 圖像灰度化 圖像灰度化就是將原彩色圖像上的三原色R、G、B的亮度值按式(1)進(jìn)行運(yùn)算,依次將算出的灰度值賦給新圖像相對應(yīng)的像素位置處[8]?;叶葓D像矩陣元素的取值范圍通常為[0,255]。通過多次對比發(fā)現(xiàn):熟透芒果的灰度值高于未成熟的。為了保證計(jì)算的實(shí)時(shí)性,通過VLIB中的VLIB_create Connected Componentslist函數(shù)進(jìn)行連通區(qū)域查找,通過VLIB_getCCFeatures遍歷每個(gè)連通區(qū)域,并獲取每個(gè)連通區(qū)域的長、寬、高等屬性,以此對連通區(qū)域進(jìn)行篩選,除去極小的干擾區(qū)域,得出包含芒果的矩形區(qū)域的位置,利用循環(huán)語句遍歷區(qū)域圖像灰度值,求出灰度均值,以此來判斷其成熟程度。
(1)
式中:
H——遍歷點(diǎn)灰度值,像素;
R——遍歷點(diǎn)紅色像素值,像素;
G——遍歷點(diǎn)綠色像素值,像素;
B——遍歷點(diǎn)藍(lán)色像素值,像素。
2.2.2 超限鄰域平均法平滑除噪 由于試驗(yàn)環(huán)境及硬件設(shè)備的影響,采集到的圖像不可避免地會有噪聲的存在,噪聲會將一個(gè)簡單閾值處理的問題變得難以解決。所以為了避免干擾,一般會在圖像預(yù)處理時(shí)對圖像進(jìn)行平滑濾波。
本試驗(yàn)采取了超限領(lǐng)域平均法[9]對圖像進(jìn)行了濾波操作,其原理是:當(dāng)某個(gè)像素點(diǎn)處的灰度值減去其領(lǐng)域灰度均值大于某個(gè)設(shè)定的閾值時(shí),才會執(zhí)行均值濾波操作。相比于最常用的均值濾波方法,該算法不僅能有效地消除圖像噪聲,而且保護(hù)了較小灰度差下的圖像細(xì)節(jié)(見圖3)。超限鄰域平均法的表達(dá)見式(2)。
(2)
式中:
f(i,j)——原圖像中的灰度值,像素;
fa(i,j)——原圖像中鄰域的灰度平均值,像素;
T——分割閾值,像素;
g(i,j)——變換后的圖像灰度值,像素。
2.2.3 二值化及拉普拉斯算法計(jì)算大小分級 二值化是圖像處理的基本算法,常用于圖像分割,將目標(biāo)物體與背景區(qū)分開來[10]。對于受外界干擾較小的圖像,根據(jù)直方圖尋找波谷,以波谷值作為閾值對圖像進(jìn)行二值化分割。
拉普拉斯求邊緣是一種二階微分算法,具有旋轉(zhuǎn)不變性,較之常用的一階邊緣算法(梯度算法、sobel算法等)更為準(zhǔn)確[11-12]。二維函數(shù)f(x,y)的拉普拉斯運(yùn)算可以定義為:
(3)
式中:
Δ2f——該點(diǎn)處灰度函數(shù)二階微分值;
f(x,y)——x,y像素坐標(biāo)處的灰度值函數(shù),像素。
定義2個(gè)數(shù)組,將檢測到的邊緣點(diǎn)放入2個(gè)數(shù)組中。以圖像中心作為旋轉(zhuǎn)中心,旋轉(zhuǎn)的角度為α,設(shè)置α[0,90]變化的循環(huán),通過比較得出包含芒果的最小矩形的面積,以此判別芒果的大小,進(jìn)行分級。
2.2.4 灰度直方圖統(tǒng)計(jì)檢測腐爛區(qū)域 灰度直方圖是關(guān)于灰度值的函數(shù),是圖像檢測處理中最常用的方法之一[13]。在一個(gè)連續(xù)的灰度圖像中,通常將灰度值為D的所有輪廓線所包含的面積記為A(D),則灰度直方圖可以定義為:
(4)
式中:
H(D)——灰度值為D的像素點(diǎn)個(gè)數(shù);
D——灰度值,像素;
A(D)——灰度值為D的所有輪廓線包含的面積,像素。
對于離散函數(shù)ΔD=1,則上式可以簡化為H(D)=A(D)-A(D+1) ,所以,對于任意數(shù)字圖像,面積函數(shù)A(D)就是大于或等于D的像素點(diǎn)的個(gè)數(shù)。
根據(jù)多次檢測試驗(yàn),統(tǒng)計(jì)分析灰度直方圖中3個(gè)波峰分別代表的含義(背景、腐爛區(qū)域和未腐爛區(qū)域),根據(jù)統(tǒng)計(jì)結(jié)果,區(qū)分背景、腐爛區(qū)域和未腐爛區(qū)域,分別計(jì)算出3個(gè)范圍內(nèi)的像素點(diǎn)的數(shù)目,以此判斷出芒果是否已經(jīng)腐爛及腐爛區(qū)域的面積大小。
2.3.1 C代碼優(yōu)化 由于DSP6437的內(nèi)部寄存器是32位的,通過內(nèi)核8個(gè)執(zhí)行單元進(jìn)行數(shù)據(jù)處理時(shí),DSP編譯規(guī)則規(guī)定了long型數(shù)據(jù)為40位,使用long型數(shù)據(jù)會更多地占用執(zhí)行單元,延長程序運(yùn)算時(shí)間。DSP處理short*short類型的數(shù)據(jù)運(yùn)算時(shí)只需要一個(gè)指令周期,而執(zhí)行int*int運(yùn)算時(shí)需要5個(gè)指令周期。因此,進(jìn)行定義數(shù)據(jù)時(shí)盡量使用short類型,可以極大地減少內(nèi)存消耗和程序運(yùn)行時(shí)間。
在進(jìn)行邊緣檢測后,對圖片進(jìn)行旋轉(zhuǎn)時(shí),根據(jù)實(shí)際需求,只需對拉布拉斯求邊緣后的邊緣點(diǎn)的坐標(biāo)進(jìn)行旋轉(zhuǎn),這樣極大地減少了程序循環(huán)計(jì)算次數(shù)及運(yùn)行時(shí)間。以100×100的目標(biāo)物為例,旋轉(zhuǎn)圖片一次的計(jì)算量為10 000,而只對邊緣坐標(biāo)進(jìn)行旋轉(zhuǎn)的計(jì)算量僅為400,極大地改善了程序的運(yùn)行。
2.3.2 存儲空間優(yōu)化 存儲空間的優(yōu)化主要通過.tcf文件中的存儲器管理模塊來實(shí)現(xiàn)[14]。因?yàn)镃編譯器中堆的大小默認(rèn)值為1 KB,而通常獲取一幀圖像進(jìn)行算法運(yùn)算時(shí)所需要的動態(tài)內(nèi)存>>1 KB,并且DM6437的片內(nèi)存儲資源有限,因此需要從DM6437的片外存儲空間SRAM和 DDR2中分配出一部分空間作為堆,進(jìn)行圖像數(shù)據(jù)的存儲和運(yùn)算,而將一些全局性的結(jié)果變量及數(shù)值存儲到片內(nèi)存儲中擁有80 KB空間的L1D中。通過手動劃分內(nèi)存可以極大地節(jié)省代碼運(yùn)行時(shí)間。動態(tài)內(nèi)存使用malloc()進(jìn)行空間分配,使用完后立刻調(diào)用free()進(jìn)行釋放,置空指針,防止內(nèi)存溢出。
2.3.3 并行處理 DM6437采用了美國TI公司第三代超長指令集結(jié)構(gòu)(VelociTI3),內(nèi)置TMS320C64x+DSP內(nèi)核,能夠同時(shí)進(jìn)行8個(gè)8位或4個(gè)16位的并行MAC運(yùn)算,而且能實(shí)時(shí)處理8路CIF或3路D1格式的編碼算法。CCS是DSP的集成開發(fā)環(huán)境,能夠?qū)崿F(xiàn)實(shí)時(shí)、多任務(wù)的開發(fā)。合理地將程序進(jìn)行分模塊的編寫,并且分配好優(yōu)先等級,通過.tcf文件合理的配置分配任務(wù)管理器,將可并行處理[15]的程序模塊鏈接入管理器中,極大調(diào)用了DSP的高速內(nèi)核運(yùn)算功能,節(jié)省了程序運(yùn)行時(shí)間。
2.3.4 圖像處理庫的使用 在DSP開發(fā)中,為了節(jié)省開發(fā)時(shí)間和難度,TI將一些成熟的算法封裝為模塊,供開發(fā)者使用。如果能充分利用這些算法支持庫,對于加快DSP開發(fā)進(jìn)程與提高代碼質(zhì)量、穩(wěn)定性有非常大的幫助。在圖像處理領(lǐng)域,TI公司給用戶提供了VLIB、IMGLIB、IQMATH等圖像處理庫[16],本檢測平臺主要運(yùn)用到的是VLIB和IMGLIB。本試驗(yàn)將VLIB庫添加到了工程文件并多次調(diào)用其算法,包括YUV轉(zhuǎn)RGB、灰度化、連通區(qū)域的查找篩選等,并使用了IMGLIB庫的圖像格式轉(zhuǎn)換、圖像濾波以及編碼解碼壓縮等函數(shù)功能,極大縮短了程序運(yùn)行的時(shí)間。
2.3.5 程序固化燒制 算法的DSP實(shí)現(xiàn)、DSP程序的移植、優(yōu)化和程序測試工作完成之后,需要將可執(zhí)行代碼固化[17]到DSP設(shè)備中,使程序能夠在脫離PC機(jī)的情況下通電自行啟動。DM6437 提供3種引導(dǎo)模式:ROM 引導(dǎo)、仿真引導(dǎo)和主機(jī)引導(dǎo),最常用的是ROM 引導(dǎo)方式,即通過片上 BootLoader 引導(dǎo)程序啟動。而SEED公司的DM6437開發(fā)板程序的燒寫,只需要將程序.out文件通過相應(yīng)的項(xiàng)目程序復(fù)制寫入到FLASH首地址的內(nèi)存即可,每次啟動時(shí)程序通過二級引導(dǎo)程序就可燒寫至執(zhí)行程序首地址內(nèi)存段。
搭建好試驗(yàn)平臺,將芒果放在傳送帶上,開啟傳送帶和采集視頻圖像。采集到的原始圖像經(jīng)連通區(qū)域篩選后的圖像見圖4。
2.4.1 芒果圖像灰度化 經(jīng)過灰度化處理,見圖5。
2.4.2 超限鄰域平均法平滑去噪 超限鄰域平均法平滑去噪后的圖像見圖6。
2.4.3 芒果大小分級 根據(jù)圖像二值化及拉普拉斯算法的計(jì)算結(jié)果,設(shè)置α[0,90]變化的循環(huán),通過比較得出包含芒果的最小矩形的面積,以此判別芒果的大小,進(jìn)行分級。芒果面積及分級結(jié)果見表1。
2.4.4 判斷芒果是否腐爛 通過多次檢測發(fā)現(xiàn),芒果腐爛部位的灰度值與未腐爛區(qū)域有明顯的差異。由圖7可知:灰度直方圖有3個(gè)波峰,依次為背景、腐爛區(qū)域和未腐爛區(qū)域。通過直方圖可以計(jì)算出這一范圍內(nèi)(灰度值為40~65)的像素點(diǎn)的數(shù)目,以此判斷出芒果是否已經(jīng)腐爛,并可得出腐爛區(qū)域的面積大小。
2.4.5 氣味覺傳感器的綜合判定 本試驗(yàn)在視覺檢測的基礎(chǔ)上,結(jié)合空氣質(zhì)量傳感器QS-01對芒果腐爛與否進(jìn)行了綜合的判斷。該傳感器能將特殊氣體(腐爛氣體、農(nóng)藥殘留氣體)的含量轉(zhuǎn)變?yōu)殡娮璐笮〉淖兓?,將輸出的電壓變化通過51單片機(jī)的A/D轉(zhuǎn)換模塊轉(zhuǎn)換并顯示在數(shù)碼管上。通過多次試驗(yàn),檢測到腐爛的芒果經(jīng)過傳感器時(shí)輸出的電壓值都高于90 mV。該方法比單方面的視覺檢測的判斷更為準(zhǔn)確。
基于DSP6437開發(fā)板構(gòu)建了芒果品質(zhì)檢測平臺,將視覺檢測和味覺傳感器結(jié)合起來判斷芒果的品質(zhì),包括用輸出LED燈亮、暗模擬實(shí)際生產(chǎn)線運(yùn)作,對芒果的大小、成熟程度以及是否腐爛進(jìn)行分級分類。相較傳統(tǒng)的單方面的視覺檢測準(zhǔn)確度更高。DSP視覺檢測的運(yùn)用,極大提高了檢測速度,可滿足實(shí)際生產(chǎn)需求,并且體積小,運(yùn)行穩(wěn)定,更適應(yīng)實(shí)際檢測環(huán)境。由于試驗(yàn)條件的影響未能對芒果進(jìn)行全面的圖像采集,腐爛區(qū)域可能出現(xiàn)于檢測背面,造成誤檢。在實(shí)
際的生產(chǎn)中需要對滾動的芒果進(jìn)行實(shí)時(shí)連續(xù)的圖像采集,保證實(shí)現(xiàn)全方位的檢測,提高檢測準(zhǔn)確率。針對此不足之處,下一步的研究需要針對芒果全部區(qū)域進(jìn)行檢測,由綜合試驗(yàn)結(jié)果判斷芒果品質(zhì)。
[1] 劉靜, 黃勇平, 章程輝. 視覺系統(tǒng)開發(fā)模塊在芒果果面缺陷檢測中的應(yīng)用[J]. 食品與機(jī)械, 2009, 25(2): 82-85.
[2] 李甦, 譚永龍, 楊美英. 芒果分級與表面缺陷檢測研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2008(15): 3 954-3 957.
[3] 康志亮, 陳韻羽, 王思, 等. 便攜式受損芒果檢測裝置的設(shè)計(jì)[J]. 農(nóng)機(jī)化研究, 2010(12): 52-56.
[4] 趙杰文, 劉劍華, 陳全勝, 等. 利用高光譜圖像技術(shù)檢測水果輕微損傷[J]. 農(nóng)業(yè)機(jī)械學(xué)報(bào), 2008(1): 106-109.
[5] 黨宏社, 宋晉國, 郭琴. 基于ARM的嵌入式芒果大小檢測與分級系統(tǒng)的實(shí)現(xiàn)[J]. 四川農(nóng)業(yè)大學(xué)學(xué)報(bào), 2011(1): 89-93.
[6] 朱明, 陸小鋒, 陸亨立, 等. AdaBoost人臉檢測算法在DSP上的移植與優(yōu)化[J]. 計(jì)算機(jī)工程與應(yīng)用, 2014(20): 197-201, 232.
[7] 呂穎. DSP圖像數(shù)據(jù)的可視化[J]. 福建電腦, 2011(3): 153-155.
[8] 肖劍雄峰. 局部對比度增強(qiáng)的彩色圖像灰度化參數(shù)化算法研究[D]. 溫州: 溫州大學(xué), 2016: 9-16.
[9] 姜小磊, 姚鴻勛, 趙思成. 一種極值約束的邊緣保持圖像平滑算法[J]. 計(jì)算機(jī)科學(xué), 2014(10): 101-105, 127.
[10] 張琪. 結(jié)合邊緣檢測的圖像二值化算法[D]. 長春: 吉林大學(xué), 2011: 24-30.
[11] 張建光, 李永霞. 基于拉普拉斯邊緣檢測算子的圖像分割[J]. 福建電腦, 2011(7): 99, 101.
[12] 周林妹. 數(shù)字圖像邊緣檢測算法及其在農(nóng)產(chǎn)品加工中的應(yīng)用[J]. 食品與機(jī)械, 2009, 25(3): 139-142, 153.
[13] 趙源萌, 王嶺雪, 金偉其, 等. 基于區(qū)域直方圖統(tǒng)計(jì)的灰度圖像色彩傳遞方法[J]. 北京理工大學(xué)學(xué)報(bào), 2012(3): 322-326.
[14] 范曄. 基于DM6437的車牌識別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安: 西安電子科技大學(xué), 2012: 61-62.
[15] 楊方. 基于TMS320C6678的多核DSP并行處理應(yīng)用技術(shù)研究[D]. 北京: 北京理工大學(xué), 2014: 47-50.
[16] 劉德方, 鄧明, 陳海燕, 等. 基于DM6437和VLIB的Canny邊緣檢測[J]. 安徽建筑工業(yè)學(xué)院學(xué)報(bào): 自然科學(xué)版, 2013(2): 72-75.
[17] 黃震, 劉亞斌. TMS320C6000系列DSP程序固化的研究[J]. 電子設(shè)計(jì)工程, 2016(12): 26-28, 32.