文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2015.07.004
中文引用格式: 林宜丙,石守東,,孫書丹. 基于OTSU算法的FPGA實(shí)時(shí)繞距測量系統(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)之間的長度,,而雙絞線之間相互纏繞的緊密程度一般通過其繞距來度量[1],。網(wǎng)線內(nèi)部雙絞線需要相互纏繞的原因是為了減少各線之間產(chǎn)生的信號(hào)串?dāng)_,而每對(duì)線對(duì)采用的繞距是不同的,,有著各自的標(biāo)準(zhǔn),,因此需要在網(wǎng)線成纜制作的同時(shí)通過實(shí)時(shí)反饋繞距值來控制成纜機(jī)制作線對(duì)。
FPGA,,即現(xiàn)場可編程門陣列,,它是在PAL、GAL,、CPLD等技術(shù)的基礎(chǔ)上進(jìn)一步發(fā)展的可編程器件,。FPGA通過為每個(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)則簡單,易于移植至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 簡化OTSU算法公式
將式(7)代入式(8)可得:
為了簡化計(jì)算,,將類間方差表達(dá)式改寫成式(10)所示。而對(duì)每幀圖像來說,,N是一個(gè)常數(shù)值,,可以忽略不計(jì),,從而式(10)可以進(jìn)一步改寫成式(11),便于FPGA并行實(shí)現(xiàn)OTSU算法,。
2 FPGA實(shí)時(shí)繞距檢測系統(tǒng)并行設(shè)計(jì)
2.1 硬件總體架構(gòu)設(shè)計(jì)
系統(tǒng)整體電路以FPGA為核心,,其外圍的器件主要包括高速CMOS圖像采集器、串口轉(zhuǎn)無線模塊以及FPGA芯片,,并在整體電路內(nèi)部設(shè)計(jì)一個(gè)電源模塊為各個(gè)模塊供電,。嵌入式繞距測量系統(tǒng)的整體框架:圖像采集部分采用高速CMOS圖像采集器,由于其有效像素點(diǎn)較多,,一般其分別率為百萬級(jí)以上,,且具有較短的曝光時(shí)間,因此被用來實(shí)時(shí)采集絞線圖像,。通過使用單一的線性光源對(duì)絞線進(jìn)行照射,,并將其投影到事先設(shè)置好的背景板上,接著通過高速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)平均法,。通過實(shí)驗(yàn)發(fā)現(xiàn),,分量法無法充分利用圖像的原始信息,最大值法使得圖像亮度偏高,,而平均值法則使得圖像亮度過于柔和,,都不利于后續(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)算過程轉(zhuǎn)換為1次求和運(yùn)算和4次移位運(yùn)算?;叶忍幚砟K的結(jié)構(gòu)見圖1,,由于采用了流水線結(jié)構(gòu)的設(shè)計(jì),即在求和運(yùn)算前加入了流水線寄存器,,從而在每一個(gè)周期內(nèi)都能輸出一個(gè)像素點(diǎn)的灰度值,。
2.3 OTSU算法的硬件并行實(shí)現(xiàn)
通過上述分析,可分為兩個(gè)步驟來計(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來保存每個(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,通過逐個(gè)激活直方圖統(tǒng)計(jì)1,、2,、3模塊,從而構(gòu)成一條流水線,,使得每個(gè)子模塊都有3個(gè)時(shí)鐘周期來統(tǒng)計(jì)1個(gè)像素點(diǎn),。讀取計(jì)數(shù)、更新計(jì)數(shù),、寫回計(jì)數(shù)3個(gè)步驟的邏輯被劃分到各自的時(shí)鐘周期來完成,,從而提高了處理的效率。用這種方式,,保證了每個(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)正是為平衡視頻編解碼與變速的圖像處理過程之間的速度不匹配問題提供數(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語言與C語言編寫,,采用的器件是Cyclone IV EP4CE1系列的芯片。OTSU算法執(zhí)行結(jié)果如圖5所示,通過換算比例尺可得出該雙絞線繞距為16.59 mm,??梢钥闯霰疚乃惴軌蜉^好地分割雙絞線圖像,且具有快速的圖像處理速度,,能夠?qū)崿F(xiàn)雙絞線圖像的實(shí)時(shí)分割,,使得系統(tǒng)能更好地檢測雙絞線繞距,達(dá)到了預(yù)期目的,,而且這種方法還可以應(yīng)用于其他各類線材的繞距,、線寬等參數(shù)的檢測。
通過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分割算法通過不斷計(jì)算得到使得類間方差達(dá)到最大值的閾值,,其算法本身有大量操作可以并行實(shí)現(xiàn),。因此,相比普通的ARM平臺(tái)的順序執(zhí)行方案,,本文使用的FPGA方案更具實(shí)時(shí)性,,能夠勝任對(duì)于網(wǎng)線實(shí)時(shí)繞距測量的處理速度要求,。通過在FPGA中構(gòu)建3個(gè)直方圖統(tǒng)計(jì)子模塊,使得算法在1個(gè)周期內(nèi)統(tǒng)計(jì)1個(gè)像素點(diǎn)的灰度值,,并使用簡化的計(jì)算公式,,大大減少了算法的處理時(shí)間,并能很好地將雙絞線目標(biāo)從背景中分割出來,。
參考文獻(xiàn)
[1] 張國光.如何檢查網(wǎng)線性能[J].鐵道通信信號(hào),,2006,42(2):62-63.
[2] 原魁,,肖晗,,何文浩.采用FPGA的機(jī)器視覺系統(tǒng)發(fā)展現(xiàn)狀與趨勢[J].計(jì)算機(jī)工程與應(yīng)用,2010(36):1-6.
[3] 齊麗娜,,張博,,王戰(zhàn)凱.最大類間方差法在圖像處理中的應(yīng)用[J].無線電工程,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] 吳繼華,,蔡海寧,,王誠.Altera FPGA/CPLD設(shè)計(jì),高級(jí)篇[M].第2版.北京:人民郵電出版社,,2011.