文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2015.07.004
中文引用格式: 林宜丙,石守東,孫書丹. 基于OTSU算法的FPGA實(shí)時(shí)繞距測(cè)量系統(tǒng)[J].電子技術(shù)應(yīng)用,2015,41(7):15-18,22.
英文引用格式: Lin Yibing,Shi Shoudong, Sun Shudan. The FPGA real-time distance measuring system based on OTSU algorithm[J].Application of Electronic Technique,2015,41(7):15-18,22.
0 引言
網(wǎng)線繞距指的是雙絞線扭繞之后兩個(gè)節(jié)點(diǎn)之間的長(zhǎng)度,而雙絞線之間相互纏繞的緊密程度一般通過(guò)其繞距來(lái)度量[1]。網(wǎng)線內(nèi)部雙絞線需要相互纏繞的原因是為了減少各線之間產(chǎn)生的信號(hào)串?dāng)_,而每對(duì)線對(duì)采用的繞距是不同的,有著各自的標(biāo)準(zhǔn),因此需要在網(wǎng)線成纜制作的同時(shí)通過(guò)實(shí)時(shí)反饋繞距值來(lái)控制成纜機(jī)制作線對(duì)。
FPGA,即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、CPLD等技術(shù)的基礎(chǔ)上進(jìn)一步發(fā)展的可編程器件。FPGA通過(guò)為每個(gè)功能單獨(dú)地建立硬件,實(shí)現(xiàn)整個(gè)應(yīng)用程序所需的功能,因此它具有并行處理的內(nèi)在特點(diǎn)。硬件設(shè)計(jì)使其擁有較高的并行運(yùn)行速度,同時(shí)又以其相對(duì)低廉的成本保持軟件所具有的可重新編程的靈活性。這使得FPGA非常適用于圖像處理,尤其在底層與中間層充分利用圖像處理固有的并行性特點(diǎn)[2]。
1 OTSU算法
1.1 OTSU算法原理
OTSU算法由日本學(xué)者大津展之提出,是一種自適應(yīng)的閾值確定算法,又叫最大類間方差法。其基本思想是根據(jù)圖像的灰度特性,將圖像按類間距離極大準(zhǔn)則分成目標(biāo)和背景兩個(gè)部分[3]。當(dāng)目標(biāo)和背景間的類間方差愈大,則表明構(gòu)成圖像的兩個(gè)部分的差別就愈大,且其判斷準(zhǔn)則簡(jiǎn)單,易于移植至FPGA中實(shí)現(xiàn),因此廣泛應(yīng)用于實(shí)時(shí)圖像分割領(lǐng)域。
此方法的基本原理:設(shè)待分割圖像包含L個(gè)灰度級(jí)(0,1,…,L-1),各個(gè)灰度值的概率為:
其中ni表示灰度值是i的像素?cái)?shù),N為總的像素?cái)?shù)。給定圖像I(x,y),目標(biāo)與背景的分割閾值記作t,則屬于目標(biāo)區(qū)域A與背景區(qū)域B的像素點(diǎn)數(shù)占整幅圖像比例分別記做:
當(dāng)使得式(8)中的類間方差達(dá)到最大,此時(shí)的t即為閾值。
1.2 簡(jiǎn)化OTSU算法公式
將式(7)代入式(8)可得:
為了簡(jiǎn)化計(jì)算,將類間方差表達(dá)式改寫成式(10)所示。而對(duì)每幀圖像來(lái)說(shuō),N是一個(gè)常數(shù)值,可以忽略不計(jì),從而式(10)可以進(jìn)一步改寫成式(11),便于FPGA并行實(shí)現(xiàn)OTSU算法。
2 FPGA實(shí)時(shí)繞距檢測(cè)系統(tǒng)并行設(shè)計(jì)
2.1 硬件總體架構(gòu)設(shè)計(jì)
系統(tǒng)整體電路以FPGA為核心,其外圍的器件主要包括高速CMOS圖像采集器、串口轉(zhuǎn)無(wú)線模塊以及FPGA芯片,并在整體電路內(nèi)部設(shè)計(jì)一個(gè)電源模塊為各個(gè)模塊供電。嵌入式繞距測(cè)量系統(tǒng)的整體框架:圖像采集部分采用高速CMOS圖像采集器,由于其有效像素點(diǎn)較多,一般其分別率為百萬(wàn)級(jí)以上,且具有較短的曝光時(shí)間,因此被用來(lái)實(shí)時(shí)采集絞線圖像。通過(guò)使用單一的線性光源對(duì)絞線進(jìn)行照射,并將其投影到事先設(shè)置好的背景板上,接著通過(guò)高速CMOS圖像采集器采集投影在背景板上的投影。最后將傳感器系統(tǒng)采集的圖像陣列傳輸至FPGA電路系統(tǒng)內(nèi),運(yùn)用OTSU圖像分割算法實(shí)時(shí)二值化圖像,將二值化圖像遞交給繞距計(jì)算模塊處理,統(tǒng)計(jì)二值圖像的各列寬度,從而計(jì)算出相鄰最窄位置(即絞線節(jié)點(diǎn))之間的距離,得到絞線的繞距值并發(fā)送至上位機(jī)。
2.2 圖像的灰度化處理
灰度圖像是指不含彩色信息,只含亮度信息的圖像,其像素點(diǎn)的值稱為灰度值,范圍為0~255。由于OTSU算法是基于灰度圖像操作的,因此需要將CMOS攝像頭采集的RGB格式圖像轉(zhuǎn)換成灰度圖像。常用的灰度化處理方法有分量法、最大值法、平均值法與加權(quán)平均法。通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),分量法無(wú)法充分利用圖像的原始信息,最大值法使得圖像亮度偏高,而平均值法則使得圖像亮度過(guò)于柔和,都不利于后續(xù)圖像分割的進(jìn)行。因此,本文采用加權(quán)平均值法實(shí)現(xiàn)灰度化處理。
攝像頭采集的圖像數(shù)據(jù)為3×8 bit的RGB信號(hào),若采用常用的權(quán)值:ωr=30%,ωg=59%,ωb=11%,將使得FPGA內(nèi)部進(jìn)行浮點(diǎn)乘法運(yùn)算,這在消耗大量的硬件資源的同時(shí),也拖慢了整個(gè)算法的執(zhí)行速度。而采用張鵬等提出的權(quán)重[4],可以有效避免浮點(diǎn)運(yùn)算,其權(quán)重分配為:ωr=25%=2-2,ωg=62.5%=2-1+2-3,ωb=12.5%=2-3;則灰度值H=2-2×R+(2-1+2-3)×G+2-3×B,從而將整個(gè)運(yùn)算過(guò)程轉(zhuǎn)換為1次求和運(yùn)算和4次移位運(yùn)算。灰度處理模塊的結(jié)構(gòu)見(jiàn)圖1,由于采用了流水線結(jié)構(gòu)的設(shè)計(jì),即在求和運(yùn)算前加入了流水線寄存器,從而在每一個(gè)周期內(nèi)都能輸出一個(gè)像素點(diǎn)的灰度值。
2.3 OTSU算法的硬件并行實(shí)現(xiàn)
通過(guò)上述分析,可分為兩個(gè)步驟來(lái)計(jì)算類間方差:
(1)在統(tǒng)計(jì)模塊中計(jì)算一幀圖像的直方圖統(tǒng)計(jì)、灰度統(tǒng)計(jì)、累積直方圖統(tǒng)計(jì)、累積灰度統(tǒng)計(jì);
(2)依次將累積直方圖與累積灰度統(tǒng)計(jì)中的數(shù)值傳入計(jì)算模塊計(jì)算類間方差。
硬件結(jié)構(gòu)框圖如圖2所示,主要由統(tǒng)計(jì)模塊與計(jì)算模塊構(gòu)成。
2.3.1 并行統(tǒng)計(jì)模塊
首先,定義一個(gè)深度為256的雙口RAM來(lái)保存每個(gè)灰度值的像素點(diǎn)個(gè)數(shù),具體操作是將每個(gè)像素點(diǎn)的灰度值作為其中一個(gè)端口的讀地址,讀取RAM單元中的計(jì)數(shù),將其值增加1,接著將更新后的計(jì)數(shù)從另一個(gè)端口寫入同一單元[5]。
其次,由于在統(tǒng)計(jì)處理每個(gè)像素點(diǎn)時(shí),都要執(zhí)行3個(gè)步驟:讀取計(jì)數(shù)、更新計(jì)數(shù)、寫回計(jì)數(shù)。只有完成當(dāng)前像素點(diǎn)的3個(gè)步驟之后,才能進(jìn)行下一個(gè)像素點(diǎn)的處理。而FPGA的并行特性能夠解決此類處理時(shí)延導(dǎo)致的低效率,即在OTSU模塊內(nèi)部構(gòu)建3個(gè)功能相同的統(tǒng)計(jì)模塊,每個(gè)模塊各自負(fù)責(zé)相鄰的3個(gè)像素點(diǎn)。如圖2,通過(guò)逐個(gè)激活直方圖統(tǒng)計(jì)1、2、3模塊,從而構(gòu)成一條流水線,使得每個(gè)子模塊都有3個(gè)時(shí)鐘周期來(lái)統(tǒng)計(jì)1個(gè)像素點(diǎn)。讀取計(jì)數(shù)、更新計(jì)數(shù)、寫回計(jì)數(shù)3個(gè)步驟的邏輯被劃分到各自的時(shí)鐘周期來(lái)完成,從而提高了處理的效率。用這種方式,保證了每個(gè)時(shí)鐘周期能夠統(tǒng)計(jì)1個(gè)像素點(diǎn)。
最后,在直方圖輸出時(shí),使用兩個(gè)加法器將3個(gè)直方圖統(tǒng)計(jì)模塊的輸出結(jié)果相加,就可以計(jì)算得到完整的直方圖統(tǒng)計(jì)。在得到完整的直方圖之后,便可分別算出灰度統(tǒng)計(jì)、累積直方圖統(tǒng)計(jì)、累積灰度統(tǒng)計(jì)。
2.3.2 流水線計(jì)算模塊
把統(tǒng)計(jì)模塊中的累積直方圖統(tǒng)計(jì)和累積灰度統(tǒng)計(jì)的結(jié)果依次送入計(jì)算模塊。對(duì)于計(jì)算模塊,如圖3,只需采用2個(gè)除法器和3個(gè)乘法器即可實(shí)現(xiàn),并且構(gòu)成一條四級(jí)流水線,這樣只需5個(gè)時(shí)鐘就能得到最終的類間方差。
3 繞距計(jì)算模塊
在數(shù)字視頻處理系統(tǒng)中,由于數(shù)據(jù)流量非常之大且對(duì)系統(tǒng)的實(shí)時(shí)性的要求也較高,因此系統(tǒng)有必要建立高速有序的視頻數(shù)據(jù)輸入/輸出流,而乒乓緩存結(jié)構(gòu)正是為平衡視頻編解碼與變速的圖像處理過(guò)程之間的速度不匹配問(wèn)題提供數(shù)據(jù)通道的。
乒乓緩存結(jié)構(gòu)將輸入數(shù)據(jù)流經(jīng)由數(shù)據(jù)選擇單元將數(shù)據(jù)流等時(shí)地劃分至兩個(gè)數(shù)據(jù)緩存區(qū)。采用乒乓操作[6]處理二值化后的圖像數(shù)據(jù)如圖4所示,設(shè)置兩個(gè)BLOCK RAM:r1,r2;在第1個(gè)緩存周期,將第一幀線材每列的寬度存入r1中;待到r1存滿后,在第2個(gè)緩存周期,繼續(xù)將第二幀的線材寬度存入r2中,與此同時(shí),對(duì)比r1中的線材寬度,找出寬度極小的n個(gè)節(jié)點(diǎn),記錄n個(gè)節(jié)點(diǎn)的列地址,記第n個(gè)節(jié)點(diǎn)的列地址A1,與n-1個(gè)節(jié)點(diǎn)的地址A0相減即得出該線材繞距,并判斷其是否符合標(biāo)準(zhǔn)。這樣,從模塊的兩端看,輸入/輸出的數(shù)據(jù)流都是連續(xù)的,從而達(dá)到了利用低速模塊處理高速數(shù)據(jù)的目的,并加快了整個(gè)算法的實(shí)時(shí)性。
4 實(shí)驗(yàn)結(jié)果與分析
本文采用Verilog語(yǔ)言與C語(yǔ)言編寫,采用的器件是Cyclone IV EP4CE1系列的芯片。OTSU算法執(zhí)行結(jié)果如圖5所示,通過(guò)換算比例尺可得出該雙絞線繞距為16.59 mm。可以看出本文算法能夠較好地分割雙絞線圖像,且具有快速的圖像處理速度,能夠?qū)崿F(xiàn)雙絞線圖像的實(shí)時(shí)分割,使得系統(tǒng)能更好地檢測(cè)雙絞線繞距,達(dá)到了預(yù)期目的,而且這種方法還可以應(yīng)用于其他各類線材的繞距、線寬等參數(shù)的檢測(cè)。
通過(guò)QuartusII編譯分析可知,二值化模塊占用FPGA芯片邏輯單元不到5%,直方圖統(tǒng)計(jì)模塊占用了約16%,而計(jì)算模塊占用了約7%的資源,這大大節(jié)約了芯片的硬件資源,節(jié)約了硬件成本,使得更多的資源可用于其他硬件算法。對(duì)于輸入時(shí)鐘為50 MHz、大小為640×480的雙絞線圖像,每幀處理時(shí)間為:T=×640×480=0.006 144 s,完全達(dá)到了實(shí)時(shí)進(jìn)行雙絞線圖像處理的要求。
5 結(jié)論
OTSU分割算法通過(guò)不斷計(jì)算得到使得類間方差達(dá)到最大值的閾值,其算法本身有大量操作可以并行實(shí)現(xiàn)。因此,相比普通的ARM平臺(tái)的順序執(zhí)行方案,本文使用的FPGA方案更具實(shí)時(shí)性,能夠勝任對(duì)于網(wǎng)線實(shí)時(shí)繞距測(cè)量的處理速度要求。通過(guò)在FPGA中構(gòu)建3個(gè)直方圖統(tǒng)計(jì)子模塊,使得算法在1個(gè)周期內(nèi)統(tǒng)計(jì)1個(gè)像素點(diǎn)的灰度值,并使用簡(jiǎn)化的計(jì)算公式,大大減少了算法的處理時(shí)間,并能很好地將雙絞線目標(biāo)從背景中分割出來(lái)。
參考文獻(xiàn)
[1] 張國(guó)光.如何檢查網(wǎng)線性能[J].鐵道通信信號(hào),2006,42(2):62-63.
[2] 原魁,肖晗,何文浩.采用FPGA的機(jī)器視覺(jué)系統(tǒng)發(fā)展現(xiàn)狀與趨勢(shì)[J].計(jì)算機(jī)工程與應(yīng)用,2010(36):1-6.
[3] 齊麗娜,張博,王戰(zhàn)凱.最大類間方差法在圖像處理中的應(yīng)用[J].無(wú)線電工程,2006(7):25-26,44.
[4] 張鵬,鐘俊,郭安明,等.設(shè)備監(jiān)控圖像預(yù)處理算法改進(jìn)及其FPGA實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2011(6):1706-1708.
[5] BAILEY D G.基于FPGA的嵌入式圖像處理系統(tǒng)設(shè)計(jì)[M].原魁,何文浩,肖晗,譯.北京:電子工業(yè)出版社,2013.
[6] 吳繼華,蔡海寧,王誠(chéng).Altera FPGA/CPLD設(shè)計(jì),高級(jí)篇[M].第2版.北京:人民郵電出版社,2011.