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