基于FPGA的結(jié)構(gòu)光圖像中心線提取
摘要:在線結(jié)構(gòu)光視覺三維測量系統(tǒng)中,為了實現(xiàn)對結(jié)構(gòu)光圖像線條紋中心的實時高精度提取,本文采用了極值法、閾值法和灰度重心法相結(jié)合的中心線提取方法。利用現(xiàn)場可編程門陣列器件(FPGA)的流水線技術(shù)以及并行技術(shù)的硬件設(shè)計來完成運(yùn)算,保證了光條紋中心點的實時準(zhǔn)確提取。實驗表明采用FPGA 實現(xiàn)圖像處理的專用算法能滿足圖像數(shù)據(jù)進(jìn)行實時準(zhǔn)確提取的要求。
本文引用地址:http://www.butianyuan.cn/article/274762.htm引言
隨著測控技術(shù)及數(shù)字圖像處理技術(shù)的高速發(fā)展,基于三角法線結(jié)構(gòu)光的三維測量具有高精度、非接觸、實時性和強(qiáng)主動受控性的特性,因此在現(xiàn)實中有廣泛的應(yīng)用,尤其是在計算機(jī)視覺、醫(yī)療診斷和工業(yè)檢測等領(lǐng)域應(yīng)用價值日漸增強(qiáng)。在結(jié)構(gòu)光檢測系統(tǒng)中,利用CCD相機(jī)以及工業(yè)相機(jī)攝取用線結(jié)構(gòu)平面激光照射照在物體表面形成的光條紋中心信息,然后根據(jù)光條紋中心偏移量進(jìn)行三維定標(biāo),這樣可以得到物體表面的各類信息,比如表面的缺陷以及形變等。有鑒于此,線結(jié)構(gòu)光條中心信息的圖像處理在測量過程中就顯得十分關(guān)鍵[1-3]。雖然目前結(jié)構(gòu)光中心線的提取方法有許多種,比如:閾值法、極值法、灰度重心法、方向模板法、Hessian矩陣法等[4-6],這些方法都有各自的優(yōu)缺點以及一定的應(yīng)用范圍?;跀?shù)字圖像處理的特點是處理的數(shù)據(jù)量非常大,處理非常耗時。所以本文研究了在FPGA上用硬件描述語言實現(xiàn)圖像的中心線提取算法,采用了極值法、閾值法和重心法相結(jié)合的中心線提取方法。通過功能模塊的硬件化,以便高速提取結(jié)構(gòu)光中心線。結(jié)果表明,實驗系統(tǒng)達(dá)到了基于視頻速度的應(yīng)用要求。
1 系統(tǒng)硬件設(shè)計
圖1為光條中心線提取系統(tǒng)的硬件設(shè)計框圖。整個中心線提取系統(tǒng)主要有四個組成部分:
(1)視頻數(shù)據(jù)編碼模塊:編碼器采用ANALOG DEVICES公司的ADV7179芯片,該編碼器能實現(xiàn)ITU—R BT601/BT656 YCrCb(其比例為4:2:2)格式的數(shù)字信號轉(zhuǎn)為NTSC/PAL摸擬視頻輸出信號;
(2)DDR2 SDRAM存儲器控制模塊:選用兩片MICRON公司的MT47H64M16 DDR2存儲器來實現(xiàn)圖像幀數(shù)的交叉緩存,為后面的中心線提取提供像素值以及坐標(biāo)值;
(3)中心線提取模塊:FPGA采用的是Altera公司Cyclone III系列的EP3C40F484C6芯片,該芯片價格低廉、實用性強(qiáng),能充分發(fā)揮芯片的并行計算能力,實現(xiàn)中心線的快速提取;
(4)視頻數(shù)據(jù)編解碼模塊:解碼器采用TEXAS INSTRUMENT 公司的TVP5150芯片,該芯片低功耗,能解決視頻輸入輸出同步問題,而且輸出型號的特性可以通過I2C串行接口進(jìn)行編程配置。
整個系統(tǒng)從CCD攝像機(jī)接收的模擬視頻信號通過視頻解碼芯片解碼后,轉(zhuǎn)換成BT656(4:2:2)YCbCr SDTV(標(biāo)清)格式的數(shù)字視頻信號,通過一個FIFO來進(jìn)行行/場消隱、解出同步信息等操作,之后提取圖像信息的Y(亮度值)分量,然后在數(shù)據(jù)上傳輸。對于圖像的傳送采用兩片DDR2來進(jìn)行奇偶兩場傳送;同時對視頻解碼器輸出的同步信號進(jìn)行檢測。當(dāng)有效數(shù)據(jù)到來時,F(xiàn)PGA選擇一片DDR2,使用隔行存儲方式,完成一幀圖像的存儲,當(dāng)?shù)诙瑘D像有效數(shù)據(jù)到來時,F(xiàn)PGA選擇另一片DDR2,以相同的方式完成第二幀圖像的存儲,依次交叉存儲,然后經(jīng)內(nèi)部的處理模塊處理后得到圖像光帶中心線坐標(biāo)[8]。將提取的一行中心線坐標(biāo)存儲在RAM里面,再經(jīng)過視頻編碼器將數(shù)字視頻信號轉(zhuǎn)換成模擬視頻信號輸出到顯示終端顯示。
2 算法的FPGA實現(xiàn)
2.1 算法流程
我們首先以列掃描的方式讀出一幀數(shù)據(jù),并將讀出的亮度值與所設(shè)定的閾值進(jìn)行比較。濾除不需要的點,然后通過像素值比較得到像素值最大點,之后用最大點周邊的3*3鄰接點來進(jìn)行灰度重心法計算出光條中心點。具體做法如下:
(1)由于光帶圖像中的亮點太多,所以對讀出的像素值與設(shè)定的閾值進(jìn)行比較,濾除雜點;
(2)對大于閾值的點進(jìn)行比較,找到亮度值最大的點及其周邊3*3鄰域點;
(3)然后,對 分別運(yùn)用(1)式求得其亞像素坐標(biāo):
(1)
2.2 存儲單元
對于算法的實現(xiàn),還要考慮圖像數(shù)據(jù)的存儲結(jié)構(gòu)。這其中包括:點存儲器,用來存儲需要運(yùn)算的單個像素點;行存儲器,用來緩存需要運(yùn)算的圖像的一行像素點;幀存儲器,用來存儲整幀圖像。一般幀存儲器都需要很大的容量,而FPGA內(nèi)部實現(xiàn)起來比較困難,所以FPGA板都會增加外部存儲器,由外部的DDR2 SDRAM 芯片實現(xiàn)[9];為了使進(jìn)行運(yùn)算的領(lǐng)域9個3*3的像素點能在同一時鐘輸出,便于進(jìn)行之后的流水線算法模塊,因此在3*3的滑動窗的硬件設(shè)計中,本文采用了2個RAM存儲器來進(jìn)行行存儲。具體操作是:先用兩個RAM存儲器存儲兩行數(shù)據(jù),等到第三行到來時,再將前兩行的數(shù)據(jù)讀出來,之后用9個寄存器存儲這9個數(shù)據(jù),以保證數(shù)據(jù)的同時獲取[10]。存儲結(jié)構(gòu)見圖2所示。
這樣,當(dāng)圖像像素點串行輸入時,經(jīng)過這種結(jié)構(gòu)的存儲器系統(tǒng),即可得到相應(yīng)點進(jìn)行灰度重心法計算所需的所有鄰域點的并行輸出。
fpga相關(guān)文章:fpga是什么
存儲器相關(guān)文章:存儲器原理
評論