本發(fā)明涉及測量
技術領域:
,特別涉及一種基于FPGA的直線特征提取系統(tǒng)。
背景技術:
:由于大多數(shù)目標物體中都包含有平面特征,因此直線可以作為最重要的特征,用于描述目標物體形狀,此外視覺測量中,直線擬合也是視覺系統(tǒng)采用的重要特征,因為直線是圖像中的重要的幾何特征之一。直線檢測已經(jīng)被廣泛應用到圖像識別及計算視覺領域,比如立體視覺、圖像分析、智能機器人、智能交通和模式識別。現(xiàn)有的直線檢測算法,如霍夫變換檢測速度慢且誤檢率較高。還有其它的直線檢測,如一些基于梯度方向的方法的最后一步都需要一個選擇標準,但是與這些方法相關的誤檢率控制措施效果不是很好。2010年,RafaelGromponeVonGioi等人在文章“LSD:一種帶誤差控制的快速直線檢測器”(LSD:AFastLineSegmentDetectorwithaFalseDetectionControl),IEEE模式分析及機器智能,第32卷,第四期,722-732頁,2010年(IEEETransactionsonPatternAnalysisandMachineIntelligence,Vol,32,No.4,pp.722-732,2010)提出了一種直線檢測器,簡稱為LSD。利用LSD,可以快速的檢測圖像中的直線段,然后根據(jù)目標的幾何特征設計快速算法,以快速確定疑似目標區(qū)域。LSD能在線性時間(linear-time)內(nèi)得到亞像素級準確度的直線段檢測算法。LSD算法被開源軟件OPENCV以軟件方式實現(xiàn),但難以直接應用到嵌入式圖像及視覺系統(tǒng)中。本發(fā)明中的直線檢測是基于LSD算法的硬件實現(xiàn),目前在硬件上還沒有被實現(xiàn)過。技術實現(xiàn)要素:本發(fā)明所要解決的技術問題是:提供一種檢測準確、誤檢率低且檢測速度快的基于FPGA的直線特征提取的硬件系統(tǒng),以滿足嵌入式圖像識別和視覺測量系統(tǒng)應用中能夠對圖像中直線進行快速準確檢測的需求。本發(fā)明的技術解決方案是:一種基于FPGA的直線特征提取的硬件系統(tǒng),直線特征硬件提取系統(tǒng)由高斯濾波單元、梯度模值和水平角計算單元、梯度偽排序單元、區(qū)域增長單元和矩形近似單元組成;高斯濾波單元用于去除待測圖像噪聲;梯度模值和水平角計算單元用于計算圖像像素的梯度模值和水平角并存儲;梯度偽排序單元的主要功能為:根據(jù)梯度模值大小將像素劃分到若干個直方塊模板并存儲;區(qū)域增長單元用于獲取同一直方塊模板中具有相同水平角的像素并存儲,以及計算區(qū)域角;矩形近似單元用于計算直線起點坐標、終點坐標和直線寬度。所述梯度模值和水平角計算單元,采用2×2滑動窗口模塊對去噪后的待測圖像進行掃描。所述水平角計算模塊輸出水平角的角度值進行量化得到方向值,并將角度值和方向值均存儲在所述水平角存儲器中。所述梯度偽排序單元包括84個直方塊模板和選擇器;所述直方塊模板是指將分布在4-255范圍內(nèi)的梯度模值,按照由小到大、每連續(xù)的3個數(shù)值范圍作為一個集合分割而成84個存儲容器;所述選擇器,用于根據(jù)像素的梯度模值大小將像素地址存儲到對應的直方塊模板,每個所述直方塊模板最終存儲滿足條件的第一個像素對應的地址和最后一個像素對應的地址。所述區(qū)域增長單元采用滑動窗口模塊對整個圖像進行掃描,所述區(qū)域增長單元包括區(qū)域像素獲取模塊、區(qū)域像素正弦值和余弦值計算模塊和區(qū)域角計算模塊;所述區(qū)域像素獲取模塊,用于將每個所述直方塊模板中存儲的第一個像素作為第一個中心點,將第二像素為最后一個中心點,將中心點與其八個鄰域點的方向值比較,找出方向值相同的鄰域點像素進行緩存,并將存儲的鄰域點作為中心點找出方向值相同的鄰域點進行緩存,最終存儲像素數(shù)目大于15個的像素。所述矩形近似單元包括中心點坐標計算單元和直線參數(shù)計算單元;所述中心點坐標計算單元包括像素坐標獲取模塊、移動位數(shù)計算模塊和中心點坐標計算模塊;所述像素坐標獲取模塊,包括用于獲取區(qū)域存儲器中像素的坐標值的區(qū)域存儲器地址產(chǎn)生器;所述移動位數(shù)計算模塊,根據(jù)像素坐標值獲取梯度模值,再根據(jù)查找表得到與梯度模值對應的權值和代表左移位數(shù)的整數(shù),將權值按照左移位數(shù)經(jīng)過左移運算后存儲在左移位數(shù)存儲器中,同時將權值經(jīng)過累加器累加再進行右移運算后,與左移位數(shù)存儲器中的數(shù)據(jù)輸入到減法器,減法器輸出結果即為移動位數(shù);所述中心點坐標計算模塊,根據(jù)所述的移動位數(shù)將區(qū)域存儲器中的像素坐標值右移運算后累加得到區(qū)域中心點坐標。所述直線參數(shù)計算單元包括:像素坐標獲取模塊、矩形長度和寬度求取模塊、直線起點終點計算模塊和直線寬度求取模塊;所述像素坐標獲取模塊,包括用于獲取區(qū)域存儲器中像素的坐標值的區(qū)域存儲器地址產(chǎn)生器;所述矩形長度和寬度求取模塊:包括矩形長度求取子模塊和矩形寬度求取子模塊,分別用于計算矩形的長度和寬度;所述直線起點終點計算模塊:以長度最小值、長度最大值、區(qū)域角余弦值以及中心坐標值cx、cy作為輸入,計算得出直線起點坐標和終點坐標;將起點坐標(x1,y1)、終點坐標(x2,y2)和寬度值傳給上位機即可。所述高斯濾波單元:采用(n+1)×(n+1)的高斯卷積模板對待測圖像進行高斯濾波降低噪音得到濾波后圖像的裝置;其中,n為大于等于1的正整數(shù);所述高斯濾波單元具體包括:用于行緩存的FIFO存儲器組、列對稱加法器組、列卷積系數(shù)寄存器組、列卷積模塊、串行寄存器組、行對稱加法器組、行卷積系數(shù)寄存器組和行卷積模塊;其中,F(xiàn)IFO存儲器組由n個FIFIO存儲器組成,列對稱加法器組和行對稱加法器組均由(n+1)/2個加法器組成,列卷積模塊和行卷積模塊均由(n+1)/2個乘法器和加法器組成;串行寄存器組由(n+1)個寄存器組成;列對稱加法器組的每個加法器均有兩個輸入端和一個輸出端,第一個所述加法器的一個輸入端直接輸入當前行數(shù)據(jù),另一個輸入端與第n個FIFO存儲器的輸出端連接,第二個加法器的一個輸入端與FIFO存儲器組中的第一個FIFO存儲器的輸出端連接,另一個輸入端與第(n-1)個FIFO存儲器的輸出端連接,以此類推;列卷積模塊中的乘法器均有兩個輸入端和一個輸出端,第一個所述乘法器的一個輸入端與所述列對稱加法器中的第一個加法器的輸出端連接,另一個輸入端與列卷積系數(shù)寄存器組的第一個存儲器連接,以此類推;然后(n+1)/2個所述乘法器的輸出端再與加法器的輸入端連接;列卷積模塊最終得到一列卷積;列卷積模塊的輸出端與串行寄存器組的輸入端連接,將經(jīng)過所述列卷積模塊處理后得到的輸出結果由串行寄存器組進行串并轉換,所述行對稱加法器組的每個加法器均有兩個輸入端和一個輸出端,第一個所述加法器的一個輸入端與串行寄存器組中的第一個寄存器的輸出端連接,另一個輸入端與第(n+1)個寄存器的輸出端連接,第二個加法器的一個輸入端與串行寄存器組中的第二個寄存器的輸出端連接,另一個輸入端與第n個寄存器的輸出端連接,以此類推;行卷積模塊中的乘法器均有兩個輸入端和一個輸出端,第一個所述乘法器的一個輸入端與所述行對稱加法器組中的第一個加法器的輸出端連接,另一個輸入端與行卷積系數(shù)寄存器組的第一個寄存器連接,以此類推;然后所述乘法器的輸出端再與加法器的輸入端連接,加法器輸出最后的卷積結果。本發(fā)明的有益效果是:本發(fā)明的硬件系統(tǒng)不僅保證了好的提取效果,而且具有穩(wěn)定性好、準確性高、時間消耗少和內(nèi)存使用少的優(yōu)勢,本發(fā)明采用并行流水線結構,直線特征提取速度能夠滿足雙目測距系統(tǒng)要求。附圖說明圖1為本發(fā)明實施例的整體硬件結構框圖。圖2為本發(fā)明實施例中高斯濾波單元的結構示意圖。圖3為本發(fā)明實施例中梯度模值和水平角計算單元的結構示意圖。圖4為本發(fā)明實施例中梯度偽排序單元的結構示意圖。圖5為本發(fā)明實施例中梯度模值和水平角計算單元水平角量化的示意圖。圖6為本發(fā)明實施例中區(qū)域增長單元的流程圖。圖7為本發(fā)明實施例中區(qū)域增長單元的結構示意圖。圖8為本發(fā)明實施例中中心點坐標計算單元的結構示意圖。圖9為本發(fā)明實施例中直線參數(shù)計算單元的操作架構示意圖。圖10為本發(fā)明實施例中直線參數(shù)計單元中矩形長度和寬度求取模塊的結構示意圖;圖11為本發(fā)明實施例中直線參數(shù)計單元中直線起點終點計算模塊和直線寬度求取模塊的結構示意圖。圖12為本發(fā)明對比實驗中,對幾何物體圖像“辦公室”的實驗結果。圖13為本發(fā)明對比實驗中,對幾何物體圖像“汽車”的實驗結果。圖14為本發(fā)明對比實驗中,對幾何物體圖像“椅子”的實驗結果。圖15為本發(fā)明對比實驗中,對幾何物體圖像“房子”的實驗結果。圖16為本發(fā)明對比實驗中,對非幾何物體圖像“馬”的實驗結果。圖17為本發(fā)明對比實驗中,對非幾何物體圖像“人物”的實驗結果。圖18為本發(fā)明對比實驗中,對曲線邊緣物體圖像“圓環(huán)”的實驗結果。圖19為本發(fā)明對比實驗中,對曲線邊緣物體圖像“車輪”的實驗結果。圖20為本發(fā)明對比實驗中,對手繪直線圖像的實驗結果。圖21為本發(fā)明對比實驗中,對手繪直線圖像的直線檢測誤差分析圖。圖22為本發(fā)明對比試驗中,對有噪聲圖像“桌子”的實驗結果。圖23為本發(fā)明對比試驗中,對有噪聲圖像“椅子”的實驗結果。圖24為本發(fā)明對比試驗中,對有噪聲圖像“黑白”的實驗結果。其中,圖12-圖19均分別包括a、b、c三幅圖,a系列圖均為待測圖像或原圖像,b系列圖均為基于LSD算法軟件系統(tǒng)的檢測圖像,c系列圖均為本發(fā)明系統(tǒng)的檢測圖像;圖20包括九幅圖,其中最后一幅圖是前面八幅圖中直線的總體展示圖;圖22、圖23和圖24均包括六幅圖,第一行的三幅圖均為有噪聲的原圖(待檢圖像),第二行的三幅圖均為經(jīng)過高斯降采樣后的圖像(待檢圖像),第一列圖像為輸入圖像(待檢圖像),第二列圖像為基于LSD算法軟件系統(tǒng)的檢測圖像結果,第三列圖像均為本發(fā)明系統(tǒng)的檢測圖像結果。具體實施方式本發(fā)明根據(jù)實際應用,以雙目視覺測量系統(tǒng)為例進行具體實施方案的說明。雙目視覺覺測量系統(tǒng)主要包括3個模塊:圖像采集模塊、FPGA處理模塊、上位機模塊,關鍵硬件組件包括兩個圖像傳感器、帶有PCIe接口的FPGA和外部存儲器、連接圖像傳感器和FPGA的接口轉換板和上位機。將所有硬件組件連接到一個單獨的PCB板上,PCIe作為連接FPGA與上位機的總線選擇,通過Spartan-6LXT設備的PCIe終端實現(xiàn)。PCIe提供了一個高帶寬和低延遲的連接,在FPGA和上位機端都保證了低開銷。在FPGA端,PCIe控制器是一個IP硬核,它消耗很少的邏輯資源,僅在連接控制器的流接口和片上DMA總線上需要消耗一些邏輯資源。雙目視覺測量系統(tǒng)的整體硬件平臺,即FPGA和上位機相結合的方式。將整體的功能實現(xiàn)大體分為圖像采集、圖像直線特征提取、圖像對直線匹配和后處理。其中圖像直線特征提取在FPGA上實現(xiàn),然后再用局部匹配的方法進行直線匹配,后處理操作將在上位機上實現(xiàn)。本發(fā)明重點在于提供一種直線特征提取的硬件系統(tǒng),對直線匹配和后處理均采用現(xiàn)有技術,在本發(fā)明中不再做詳細描述。其中直線特征提取是雙目視覺中重要和基礎的一步,它的硬件實現(xiàn)直接影響到整個雙目測距功能的整體效果。直線檢測是嵌入式視覺應用程序中很重要的一步。直線檢測已經(jīng)被廣泛應用到工業(yè)領域,比如圖像分析、智能機器人、智能交通和模式識別。包括直線提取在內(nèi)的圖像特征提取是立體視覺中最基本和最重要的一步。本發(fā)明是基于FPGA的直線特征提取的硬件系統(tǒng),來實現(xiàn)對圖像的直線特征提取。該系統(tǒng)主要包括五個部分,分別是梯度求取和水平角計算單元、梯度偽排序單元、區(qū)域增長單元和直線參數(shù)計算單元,從而得到最終的直線參數(shù),包括起點、終點和直線像素寬度。進一步地,該系統(tǒng)還可以包括高斯濾波單元,圖像首先用高斯核進行濾波來消除噪聲影響后在進行后續(xù)計算。本發(fā)明中僅對圖像采取圖像高斯濾波,不進行降采樣處理。以下采用實施例來詳細說明本發(fā)明的實施方式,借此對本發(fā)明如何應用技術手段來解決技術問題,并達成技術效果的實現(xiàn)過程能充分理解并據(jù)以實施。參見圖1,本發(fā)明實施例提供了一種FPGA的直線特征提取的硬件系統(tǒng),包括高斯濾波單元、梯度模值和水平角計算單元、梯度偽排序單元、區(qū)域增長單元和矩形近似單元;在本實施例中選用MT9V032圖像傳感器采集圖像,并在嵌入式時鐘和縱向、橫向代碼的共同作用下以320Mbps的速度連續(xù)輸出視頻流,并通過視頻流獲取VGA圖像(待測圖像)作為本系統(tǒng)的輸入;(1)高斯濾波單元:用于去除待測圖像噪音的裝置;(2)梯度模值和水平角計算單元:用于計算圖像像素的梯度模值和水平角并存儲的裝置;梯度模值和水平角是一個直線段的兩個重要的基本元素。水平角代表了邊緣的方向。在本發(fā)明的硬件實現(xiàn)中,對每一個像素的梯度模值和水平角的計算方法采取了合理的計算方法,以適應硬件的結構特點;(3)梯度偽排序單元:根據(jù)梯度模值大小將像素劃分成若干個直方塊并存儲的裝置;(4)區(qū)域增長單元:用于獲取同一直方塊中具有相同水平角的像素并存儲,以及計算區(qū)域角的裝置;(5)矩形近似單元:用于計算直線起點坐標、終點坐標和直線寬度的裝置。具體如下:(1)本發(fā)明實施例高斯濾波單元采用5×5的高斯卷積模板對待測圖像進行高斯濾波降低噪音得到濾波后圖像的裝置;所述高斯濾波單元具體包括:用于行緩存的FIFO存儲器組、列對稱加法器組、列卷積系數(shù)寄存器組、列卷積模塊、串行寄存器組、行對稱加法器組、行卷積系數(shù)寄存器組和行卷積模塊;其中,F(xiàn)IFO存儲器組由4個FIFIO存儲器組成,列對稱加法器組和行對稱加法器組均由3個加法器組成,列卷積模塊和行卷積模塊均由3個乘法器和加法器組成;串行寄存器組由5個寄存器組成;列對稱加法器組的每個加法器均有兩個輸入端和一個輸出端,第一個所述加法器的一個輸入端直接輸入當前行數(shù)據(jù),另一個輸入端與第四個FIFO存儲器的輸出端連接,第二個加法器的一個輸入端與FIFO存儲器組中的第一個FIFO存儲器的輸出端連接,另一個輸入端與第三個FIFO存儲器的輸出端連接,第三個加法器的一個輸入端與FIFO存儲器組中的第二個FIFO存儲器的輸出端連接,另一個輸入端直接輸入0值;列卷積模塊中的乘法器均有兩個輸入端和一個輸出端,第一個所述乘法器的一個輸入端與所述列對稱加法器中的第一個加法器的輸出端連接,另一個輸入端與列卷積系數(shù)寄存器組的第一個存儲器連接,以此類推;然后三個所述乘法器的輸出端再與加法器的輸入端連接;列卷積模塊最終得到一列卷積;列卷積模塊的輸出端與串行寄存器組的輸入端連接,將經(jīng)過所述列卷積模塊處理后得到的輸出結果由串行寄存器組進行串并轉換,所述行對稱加法器組的每個加法器均有兩個輸入端和一個輸出端,第一個所述加法器的一個輸入端與串行寄存器組中的第一個寄存器的輸出端連接,另一個輸入端與第五個寄存器的輸出端連接,第二個加法器的一個輸入端與串行寄存器組中的第二個寄存器的輸出端連接,另一個輸入端與第四個寄存器的輸出端連接,第三個加法器的一個輸入端與第三個寄存器的輸出端連接,另一個輸入端直接輸入0值;行卷積模塊中的乘法器均有兩個輸入端和一個輸出端,第一個所述乘法器的一個輸入端與所述行對稱加法器組中的第一個加法器的輸出端連接,另一個輸入端與行卷積系數(shù)寄存器組的第一個寄存器連接,以此類推;然后所述乘法器的輸出端再與加法器的輸入端連接,加法器輸出最后的卷積結果。上述高斯濾波單元原理具體為:在圖像處理中高斯濾波經(jīng)常被用來降低噪聲影響。高斯核函數(shù)是可分離的,時域內(nèi)二維高斯卷積函數(shù)如等式(14)所示,它的離散化等式如等式(15)所示,為了保持圖像亮度,高斯核的系數(shù)按照等式(16)進行歸一化,本發(fā)明為了盡可能多地減少乘法器的使用,將二維高斯函數(shù)分離成兩個一維的高斯函數(shù),所以一個二維的高斯卷積模板可以分成兩個一維的模板從而簡化模板(如圖2所示),模板中元素值是理論值的256倍,因為FPGA不擅長處理浮點數(shù),所以每一個像素由16位表示,其中低8位代表小數(shù)部分,高8位代表整數(shù)部分。一維高斯核的系數(shù)通過等式(17)求取,本發(fā)明定義σ值為1,求取的系數(shù)如表3所示。表3一維模板系數(shù)對照表位置C(-2)C(-1)C(0)C(1)C(2)系數(shù)14631046314注:C是指系數(shù)值。高斯濾波后,像素的高8位被傳到后續(xù)單元來完成后面的操作,從選擇的高斯卷積模板中可以看到元素是關于第三行和第三列軸對稱的,所以將5×5的模板分成兩個一維模板后,又用加法器代替乘法器,因此乘法器的數(shù)量從原先的25個降到6個。具體硬件實現(xiàn)過程:首先,利用5×5的滑動窗口模塊從左到右,從上到下完成對整個圖像的掃描。一窗口的像素通過運算產(chǎn)生一個最終的結果就如圖2中的卷積結果?;瑒哟翱趯崿F(xiàn)由很多方式如移位寄存器,可是這種方法會浪費很多晶體管,因為移位寄存器是通過觸發(fā)器來實現(xiàn)的,再如用SRAM來實現(xiàn)滑動窗口,但是這種結構實現(xiàn)起來很復雜。本發(fā)明采用四個FIFO存儲器來實現(xiàn)窗口操作。通過設置FIFO存儲器IP核的參數(shù)我們控制每一個FIFO存儲器的容量,并且在程序中設置讀寫管腳的觸發(fā)信號,然后圖像數(shù)據(jù)一旦以數(shù)據(jù)流的方式傳入FIFO存儲器,這四個FIFO存儲器將會存儲四行的圖像數(shù)據(jù),一個FIFO存儲器存儲一行,當?shù)谖逍械膱D像數(shù)據(jù)傳進來的時候,所有FIFO存儲器的讀信號同時有效,然后每個周期輸出5個像素,作為3個對稱加法器的輸入,并將會產(chǎn)生3個輸出,然后與預先設置好的權值相乘,最后通過一個樹形加法器相加。通過上述操作將會產(chǎn)生一個列卷積,然后這個結果存儲在串行移位寄存器組中。存儲著列卷積的5個移位寄存器進行類似的操作來得到最后的卷積結果,也是我們需要的最終卷及結果。對一幅圖像來說,前兩行和最后兩行圖像數(shù)據(jù)保持原值不被處理。其中,高斯濾波單元采用一個并行流水線結構來將二維高斯卷積變成兩個一維卷積,這樣的架構不僅提高了整體的并行性而且還減少了乘法器的使用,這兩點在硬件實現(xiàn)中都是很重要的。(2)梯度模值和水平角計算單元(參見圖3-圖5):采用2×2滑動窗口模塊對整個圖像進行掃描來求取梯度模值,包括FIFO存儲器、梯度計算模塊、兩個移位寄存器、水平角計算模塊、加法器、梯度存儲器和水平角存儲器;圖像數(shù)據(jù)流經(jīng)FIFO存儲器緩存,實現(xiàn)兩行數(shù)據(jù)同時輸入到所述梯度計算模塊中,所述梯度計算模塊將計算出的x方向梯度值和y方向梯度值分別經(jīng)過所述移位寄存器得到x方向梯度真值和y方向梯度真值,兩個所述移位寄存器的輸出端與所述加法器連接,所述加法器輸出即為梯度模值并存儲在梯度存儲器中;梯度計算模塊的梯度模值計算公式如下:G(x,y)=|gx(x,y)|+|gy(x,y)|(1)水平角計算模塊包括兩個輸入端和一個輸出端,兩個移位寄存器的輸出端與所述水平角計算模塊的輸入端連接,所述水平角計算模塊的輸出端與所述水平角存儲器連接;水平角計算模塊利用x方向梯度值和y方向梯度值計算得出水平角;水平角計算模塊的水平角計算公式如下:其中,公式(1)和公式(2)中,i(x,y)指像素(x,y)的灰度值。由圖3能夠看出,梯度計算模塊計算得到的梯度值是梯度真值的2倍,所以在梯度計算模塊計算出x方向梯度值和y方向梯度值后,需要右移兩位才能得到x方向梯度真值和y方向梯度真值,并按照等式(1)計算出梯度模值。在發(fā)明中水平角的計算采用CORDIC算法來解決,原理通過和等式(2)來詮釋。(x1,y1)和(x2,y2)的關系如等式(3)所示,為了計算方便,對坐標(x1,y1)進行偽旋轉得到坐標與坐標(x2,y2)相比,坐標具有相同的角度,只是梯度模值較大,偽旋轉后坐標與坐標(x1,y1)關系如等式(4)所示?;趥涡D,在等式(5)中,z(i+1)是經(jīng)過第i次旋轉后的角度,對于arctan(y/x)的求取,工作流如下,首先是預處理,然后取一組初值,z0=0,x0=x',y0=y(tǒng)',當y值接近0或迭代13次后對應的z值就是所求的結果。在等式(5)中,di取值±1,符號與yi相同。旋轉角度滿足等式(6)的約束條件。所述的預處理是指根據(jù)坐標系內(nèi)四個象限中的角度關系,將[-π,π]范圍內(nèi)的角轉換到角內(nèi),最后再根據(jù)相關標志將角度轉換過來。tanθi=2-i(i=0,1,2…)(6)從表1中可以看出,角度并不是FPGA擅長處理的整數(shù),為了解決這個問題,需將所有的角度擴大256倍,即用低8位來表示一個角的小數(shù)部分。表1每次旋轉的角度i0123456789101112θ45°26.57°14.04°7.13°3.58°1.79°0.90°0.45°0.22°0.11°0.06°0.03°0.01°將水平角計算模塊輸出的水平角的角度值進行量化得到方向值,角度值和方向值同樣重要,用于判斷像素是否共直線。因此,參見圖5本發(fā)明中將介于(-180°,180°]的角度劃分成8個方向,每45度被定義為一個方向,用3位二進制數(shù)表示,即“000”表示方向0,“111”表示方向7。所以存在水平角存儲器里的值不僅有角度值還有方向值。每個水平角存儲單元是20位,低3位表示像素水平角的方向值,高17位每個水平角的角度值。(3)梯度偽排序單元包括:選擇器和84個直方塊模板;84個直方塊模板是指將分布在4-255范圍內(nèi)的梯度模值,按照由小到大、每3個數(shù)值范圍作為一個集合分割而成的84個存儲容器,即由小到大排列共有84個直方塊模板,每個直方塊模板僅用于存儲屬于所述3個數(shù)值范圍內(nèi)的像素;比如第1直方塊模板1用于接收梯度模值從4到6的像素,第74直方塊模板用于接收梯度模值從223到225的像素。每個直方塊模板包括一個計數(shù)器和兩個寄存器,兩個寄存器分別為第一寄存器和第二寄存器;梯度存儲器的輸出端與一數(shù)據(jù)緩存器的輸入端連接,數(shù)據(jù)緩存器通過選擇器與84個直方塊模板連接,選擇器將梯度模值根據(jù)梯度模值大小進行分類,并將梯度模值所對應的地址輸入到對應的直方塊模板內(nèi);所述直方塊模板接收到數(shù)據(jù)后,計數(shù)器加1,并將第一個梯度模值對應的地址輸入到所述直方塊模板的第一寄存器中,并將第二個梯度模值對應的地址輸入到所述直方塊模板的第二寄存器中,當?shù)谌齻€梯度模值對應的地址輸入到所述第二寄存器中并覆蓋第二個梯度模值對應的地址,當?shù)趍+1個梯度模值對應的地址輸入到所述第二寄存器中并覆蓋第m個梯度模值對應的地址,以此類推,因此選擇器實際相當于一個查找表,即第一寄存器保存第一個梯度模值所對應的地址,第二寄存器僅保留最后一個梯度模值所對應的地址。因此,并不是所有的像素都一個個被分別存到相應的直方塊模板中,只有第一個和最后一個滿足條件的像素的地址被保存,同時計數(shù)器記錄滿足各自直方圖條件的總像素數(shù)。由于梯度模值和水平角計算單元與梯度偽排序單元并行運行,因此梯度模值計算完成后,梯度偽排序也相繼完成,此時,直方塊模板的計數(shù)器中記錄著總像素個數(shù),兩個寄存器里分別記錄著第一個梯度模值對應的地址和最后一個梯度模值對應的地址。梯度偽排序實際上是對像素基于梯度幅值的分類。圖3可以看出,只有完成濾波的像素才會被計算梯度,并不是指完成了整個圖像的濾波梯度模值和水平角計算單元才開始。高斯濾波單元和梯度模值和水平角計算單元并行運行,考慮到不同的計算延遲,梯度模值和水平角計算單元比高斯濾波單元延遲幾行的時鐘周期以確保梯度模值和水平角計算單元的輸入是經(jīng)過濾波后的像素?;诠潭ǖ难舆t,這兩個單元可以共用同一個計數(shù)器來與像素地址相對應。(4)區(qū)域增長單元(參見圖5和圖7),采用3×3的滑動窗口模塊對整個圖像進行掃描,所述區(qū)域增長單元包括區(qū)域像素獲取模塊、區(qū)域像素正弦值和余弦值計算模塊和區(qū)域角計算模塊。介于每個直方塊模板兩個寄存器所記錄的地址之間的像素的水平角都要與其相鄰的8個鄰域像素的水平角做比較,滿足預定條件的像素被包含進一個特定的區(qū)域,并且同時它們作為新的中心點來與它們各自的8鄰域像素做比較,所有的直方圖同時進行這個操作。a、區(qū)域像素獲取模塊,包括滑動窗口地址產(chǎn)生器、水平角存儲器地址產(chǎn)生器、子區(qū)域1寄存器、子區(qū)域2寄存器、選擇器和區(qū)域存儲器;將所述直方塊模板中第一寄存器中存儲的地址對應的像素作為第一個中心點,第二寄存器中存儲的地址對應的像素為最后一個中心點,所述水平角存儲器地址產(chǎn)生器將依次獲取第一個中心點和最后一個中心點之間所有像素對應的地址;根據(jù)每一個中心點對應的地址,獲取水平角存儲器中中心點的方向值和中心點相鄰的八個鄰域點的方向值,然后將八個鄰域點的方向值分別與中心點的方向值邏輯“與”,將結果為“1”的鄰域點存儲在子區(qū)域1寄存器中,同時將水平角存儲器的數(shù)據(jù)左移一位并且加1,將結果為“0”的鄰域點左移一位并加0后存儲在水平角存儲器中;然后將存儲在子區(qū)域1寄存器中的鄰域點再次作為中心點,與其相鄰的八個鄰域點的方向值進行邏輯“與”,并將結果為“1”的鄰域像素地址存儲在子區(qū)域2寄存器中,將結果為“0”的鄰域點左移一位并加0后存儲在水平角存儲器中;最后將最終存儲在子區(qū)域1寄存器和子區(qū)域2寄存器中的數(shù)據(jù)存儲在區(qū)域存儲器中,若區(qū)域存儲器中的像素數(shù)目少于15個,則區(qū)域存儲器將會被釋放,若區(qū)域存儲器中的像素數(shù)目大于或等于15個,則將數(shù)據(jù)輸入到區(qū)域像素正弦值和余弦值計算模塊;其中,子區(qū)域1寄存器、子區(qū)域2寄存器和區(qū)域存儲器構成一個乒乓操作,從而節(jié)省了緩存區(qū)空間和提高了數(shù)據(jù)處理效率。b、區(qū)域像素正弦值和余弦值計算模塊,用于計算出每個像素的正弦值和余弦值,并求取像素正弦累加值和余弦累加值;在本發(fā)明中正旋值和余弦值的計算仍然采用CORDIC算法來解決,在上述水平角的計算中已進行闡述,具體原理和實現(xiàn)方法在此不再贅述;c、區(qū)域角計算模塊,根據(jù)正弦累加值和余弦累加值計算出區(qū)域角;其中,區(qū)域角的計算公式為:其中,level-line-anglej為像素j的水平角。(5)矩形近似單元包括中心點坐標計算單元和直線參數(shù)計算單元;直線對應一個矩形,所以在求取直線參數(shù)之前,應首先確定對應所生成的區(qū)域的矩形,一個矩形的三個主要元素是矩形中心(cx,cy)和矩形的方向角;a、中心點坐標計算單元(參見圖8)包括像素坐標獲取模塊、移動位數(shù)計算模塊和中心點坐標計算模塊;像素坐標獲取模塊,包括用于獲取區(qū)域存儲器中像素的坐標值的區(qū)域存儲器地址產(chǎn)生器;移動位數(shù)計算模塊,根據(jù)像素坐標值獲取梯度模值,再根據(jù)查找表得到與梯度模值對應的權值和代表左移位數(shù)的整數(shù),將權值按照左移位數(shù)經(jīng)過左移運算后存儲在左移位數(shù)存儲器中,同時將權值經(jīng)過累加器累加再進行右移運算后,與左移位數(shù)存儲器中的數(shù)據(jù)輸入到減法器,減法器輸出結果即為移動位數(shù);中心點坐標計算模塊,根據(jù)所述的移動位數(shù)將區(qū)域存儲器中的像素坐標值右移運算后累加得到區(qū)域中心點坐標。參見圖8所示,利用移位寄存器來計算中心點坐標,矩形中心點坐標計算公式如等式(8)和等式(9)。bits=[integerdenominatoe-integernumerator](8)具體實現(xiàn)過程為:首先通過像素坐標獲取模塊獲取它的坐標(x,y),然后根據(jù)它的地址在在梯度存儲器中取出梯度模值;如表2所示,每一個梯度模值對應一個權值和一個整數(shù),這個整數(shù)代表左移的位數(shù)。對區(qū)域存儲器中的每一個像素,它所對應的整數(shù)被存在“左移位數(shù)RAM”中,它所對應的權值被存儲在一個寄存器中,這個寄存器存儲著“區(qū)域RAM”中所有像素的累加權值。一旦整個RAM塊都完成了左移位運算,寄存器中就記錄了像素的權值和。然后根據(jù)表2將這個權值和轉換成一個整數(shù),用來代表需要右移的位數(shù),因為它在分母的位置上。存儲在“左移位數(shù)RAM”中的值都是從0到8的整數(shù)代表著左移的位數(shù),因為它們在分子的位置上。矩形中心點的x坐標是所有像素的x坐標右移后的累加和,矩形中心點的y坐標是所有像素的y坐標右移后的累加和。由于所述位數(shù)(包括左移位數(shù)和右移位數(shù))的最大值是8,所以對每一個坐標(x,y),首先被擴展為16位,低8位代表小數(shù)部分。累加操作結束后,只有高8位被用作中心點的像素的坐標。表2梯度與權值之間的查找表梯度模值權值位數(shù)<210<421<842<1683<32164<64325<128646<2551287=2552568b、直線參數(shù)計算單元包括:像素坐標獲取模塊、矩形長度和寬度求取模塊、直線起點終點計算模塊和直線寬度求取模塊;b1、像素坐標獲取模塊,包括用于獲取區(qū)域存儲器中像素的坐標值的區(qū)域存儲器地址產(chǎn)生器;b2、矩形長度和寬度求取模塊(參見圖10):包括矩形長度求取子模塊和矩形寬度求取子模塊,分別用于計算矩形的長度和寬度;為了得到最后的直線參數(shù),因此引入中間參數(shù)dx、dy、l、w,其中l(wèi)為矩形長度,w為矩形寬度,中間參數(shù)是通過下面的等式來求取;dx=cosθ(10)dy=sinθ(11)l=(x-cx)×dx+(x-cy)×dy(12)w=(y-cy)×dx-(x-cx)×dy(13)具體為:參見圖10,矩形長度求取子模塊包括兩個減法器、兩個乘法器和兩個比較器,坐標值x和中心坐標值cx作為第一減法器的輸入,坐標值y和中心坐標值cy作為第二減法器的輸入,第一減法器的輸出和區(qū)域角余弦值作為第一乘法器的輸入,第二減法器的輸出和區(qū)域角正弦值作為第二乘法器的輸入,第一乘法器的輸出和第二乘法器的輸出作為加法器的輸入,加法器的輸出作為兩個比較器的輸入,第一比較器得到長度最小值lmin,第二比較器得到長度最大值lmax;b3、矩形寬度求取子模塊(參見圖11)包括三個減法器、兩個乘法器和兩個比較器,坐標值x和中心坐標值cx作為第一減法器的輸入,坐標值y和中心坐標值cy作為第二減法器的輸入,第一減法器的輸出和區(qū)域角正弦值作為第一乘法器的輸入,第二減法器的輸出和區(qū)域角余弦值作為第二乘法器的輸入,第一乘法器的輸出和第二乘法器的輸出作為第三減法器的輸入,第三減法器的輸出作為兩個比較器的輸入,第一比較器得到寬度最小值wmin,第二比較器得到寬度最大值wmax,將寬度最小值wmin和寬度最大值wmax輸入到一減法器即得直線寬度值;b4、直線起點終點計算模塊(參見圖11):包括四個乘法器、四個加法器和一個減法器;長度最小值和區(qū)域角余弦值作為第一乘法器的輸入,第一乘法器的輸出和中心坐標值cx作為第一加法器的輸入,第一加法器輸出即得起點坐標值x1;長度最大值和區(qū)域角余弦值作為第二乘法器的輸入,第二乘法器的輸出和中心坐標值cx所謂第二加法器的輸入,第二加法器的輸出即為終點坐標值x2;長度最小值和區(qū)域角正弦值作為第三乘法器的輸入,第三乘法器的輸出和中心坐標值cy作為第三加法器的輸入,第三加法器的輸出即為起點坐標值y1,長度最大值和區(qū)域角正弦值作為第四乘法器的輸入,第四乘法器的輸出和中心坐標值cy作為第四加法器的輸入,第四加法器的輸出即為終點坐標值y2;由于直線寬度值比直線起點終點坐標提前計算出一個時鐘周期,為了保證5個參數(shù)輸出的同步性,直線寬度值先被暫時緩存到一個寄存器中;將起點坐標(x1,y1)、終點坐標(x2,y2)和寬度值傳給上位機即可。實施例本發(fā)明選擇多種類型的圖像對本系統(tǒng)進行測試和評估,同時選擇基于LSD算法的軟件系統(tǒng)對相同的待測圖像進行直線特征提取,并對提取結果進行對比,并從系統(tǒng)的穩(wěn)定性、硬件資源消耗情況和時間消耗三個方面對測試結果進行評估。其中,本發(fā)明系統(tǒng)最終得到的直線參數(shù),通過CY7C68013的USB控制器(有16個數(shù)據(jù)線)傳到PC機并將檢測到的直線顯示在于輸入圖像大小相等的空白圖像上。圖像選擇:采用多種類型的有噪聲圖像和無噪聲圖像來驗證本發(fā)明系統(tǒng)的有效性和穩(wěn)定性,其中無噪聲圖像包括自然圖像和手繪的直線圖像(如圖20-圖22),自然圖像包括幾何物體圖像(如圖12-圖15),非幾何物體圖像(如圖16-圖17),以及具有曲線邊緣物體圖像(如圖18-圖19)。其中,圖12-圖19均分別包括a、b、c三幅圖,a系列圖均為待測圖像或原圖像,b系列圖均為基于LSD算法軟件系統(tǒng)的檢測圖像,c系列圖均為本發(fā)明系統(tǒng)的檢測圖像。(一)無噪聲自然圖像測試結果1、幾何圖像的檢測結果如圖15-圖18所示,能夠看出本發(fā)明的硬件系統(tǒng)提取的圖像直線特征很好的勾畫出了物體的輪廓,與現(xiàn)有的軟件系統(tǒng)檢測效果基本一致,除了一些極短的、被視為無意義的直線片段被忽略,幾乎所有直線段均被檢測出來,而且沒有誤檢測。在雙目直線匹配中,與漏檢率相比,我們更關心誤檢率,因為只要在左右圖像中能檢測出若干條典型的直線,接下來的工作就可繼續(xù)進,但是過大的誤檢率會使接下來的匹配非常麻煩。2、非幾何圖像的檢測結果如圖19和圖20所示,能夠看本發(fā)明系統(tǒng)檢測出的許多直線段雖然并不是真的直物體,但卻是一個合理的近似,比如圖20-c中圖片中兩個人的下部和胳膊。對于這種情況,也許它并不嚴格準確,但是在雙目測距系統(tǒng)中是一種合理的近似。3、具有曲線邊緣的物體圖像檢測結果如圖18和圖19所示,本發(fā)明的系統(tǒng)可實現(xiàn)一些直線段組合來近似曲線的效果,即從檢測結果圖像也可以看出,當具有相同方向的且連續(xù)的短直線段出現(xiàn)的時候,我們可以將它們的組合視為一個曲線。圖21和圖22中b系列和c系列的圖像基本一致,說明本發(fā)明的系統(tǒng)能夠很好的檢測出具有曲線邊緣的物體圖像的直線。從上述1-3的對比試驗及分析可以看出,本發(fā)明基于FPGA的直線特征提取的硬件系統(tǒng)能夠實現(xiàn)很好的直線檢測結果,而且穩(wěn)定性很好。(二)無噪聲手繪直線圖像的測試結果為了進一步檢驗我們算法的準確性,我們畫了八條代表性直線,它們的方向在我們的日常生活中很常見。手繪的直線信息(包括首尾坐標和直線角度)如表4所示,手繪直線圖像從左到右、從上到下依次如圖20所示,圖20中包括九幅圖,其中最后一幅圖是所有直線的總體展示圖。表4手繪直線的信息參照表直線標號12345678首點坐標(30,128)(30,185)(30,226)(185,30)(128,30)(71,30)(30,30)(30,71)尾點坐標(226,128)(226,71)(226,30)(71,226)(128,226)(185,226)(226.226)(226,185)直線角度0°30°456090120135150所有待測的手繪直線圖像都是256×256,它們通過CY7C68013的USB控制器傳給本發(fā)明系統(tǒng),本發(fā)明系統(tǒng)將檢測到的直線參數(shù),包括首點坐標、末點坐標以同樣的方式傳給PC機,然后將檢測到的參數(shù)與真值比較,為了排除偶然因素的影響,我們對每一種直線圖像分別檢測10次,檢測結果誤差分析如圖21所示。誤差定義的計算公式如等式(18)所示,由于圖21所示的誤差是x坐標和y坐標的和誤差,包括首點坐標和尾點坐標,所以總的誤差如等式(19)所示。由圖21可以看出,手繪的直線圖的檢測誤差不大,在三個典型值上分布,即0、0.057和0.151,并且它們分別對應0個像素誤差、1個像素誤差和2個像素誤差。這意味著當直線是水平的和垂直的,本發(fā)明可以無誤差地完成檢測。因為這兩種直線是我們?nèi)粘I钪凶畛R姷?,所以本發(fā)明為雙目測距傳感器提供了一個非常有效的直線檢測方法。其它角度直線的檢測誤差也很小,可以被接受,而卻10次實驗誤差基本一樣,可以得出結論本發(fā)明具有很好的穩(wěn)定性。(三)有噪聲圖像測試結果上述實驗是基于無噪聲圖像,檢測結果具有很好的準確性和穩(wěn)定性。參照圖22-圖24,本實驗是對有噪聲圖像的檢測試驗,其中,圖22、圖23和圖24均包括六幅圖,第一行的三幅圖均為有噪聲的原圖(待檢圖像),第二行的三幅圖均為經(jīng)過高斯降采樣后的圖像(待檢圖像),高斯降采樣后的圖像分辨率為原圖像的1/2,第一列圖像為輸入圖像(待檢圖像),第二列圖像為基于LSD算法軟件系統(tǒng)的檢測圖像,第三列圖像均為本發(fā)明系統(tǒng)的檢測圖像。由圖23-圖24可以看出,當圖像含有噪聲時,基于LSD算法軟件系統(tǒng)和本發(fā)明系統(tǒng)均無法很好的檢測到直線,因為噪聲對水平角有很壞的影響,高斯降采樣可以解決這個問題。從圖24中的第一行圖像可以看出,在有噪聲的情況下,本發(fā)明系統(tǒng)的檢測結果要好于基于LSD算法軟件系統(tǒng)的檢測結果,它最大限度地得到了直線形狀。對于一個雙目測距系統(tǒng),圖像基本都是從自然界獲得,沒有那么多的噪聲,因此本發(fā)明系統(tǒng)沒有對圖像進行高斯降采樣的預處理。(四)硬件資源消耗情況和時間消耗本發(fā)明系統(tǒng)通過ISE12.2軟件成功綜合、放置和布線,在Spantan6XC6SLX45FPGA平臺上的資源消耗情況和內(nèi)存使用量,結果如表5和表6所示,主要分4部分分別對應本系統(tǒng)的4個不同的模塊:(1)高斯濾波FIFO窗口產(chǎn)生器;(2)梯度和水平角緩存(FIFO窗口產(chǎn)生器和像素梯度模值和水平角緩存);(3)根據(jù)特定約束條件所形成的區(qū)域的緩存;(4)中間參數(shù)的緩存。表5本發(fā)明硬件系統(tǒng)資源消耗統(tǒng)計表資源種類使用量提供量利用率片寄存器122165457622%片查找表184272728867%片4012688258%DSP塊105817%表6本發(fā)明硬件系統(tǒng)內(nèi)存使用量統(tǒng)計表本發(fā)明系統(tǒng)采用80MHz的時鐘頻率,該時鐘由Xilinx內(nèi)部芯片數(shù)字時鐘控制器產(chǎn)生。并行和流水線結構,對于每一個模塊內(nèi)的數(shù)據(jù)級并行情況,時間由最長的子模塊決定。對于整個系統(tǒng),時間消耗是主要流水線型模塊的和。時間消耗與輸入圖像的大小成正比,并且與圖像的直線數(shù)目有關。為了更好地比較系統(tǒng)消耗時間,本實驗選用圖12-圖17六幅圖像作為輸入圖像,分別使用基于LSD算法的軟件系統(tǒng)和本發(fā)明基于FPGA的硬件系統(tǒng)進行對比,結果如如表7所示。表7時間消耗對照表項目軟件系統(tǒng)本發(fā)明圖像大小256×256256×256頻率3.10GHz80MHz實現(xiàn)平臺PCFPGA圖15總時間消耗/ms77.218.3圖16總時間消耗/ms88.019.9圖17總時間消耗/ms78.119.1圖18總時間消耗/ms69.417.7圖19總時間消耗/ms149.528.6圖20總時間消耗/ms102.521.1平均時間消耗/ms94.120.8從表7可以看出,與基于LSD算法的軟件系統(tǒng),由于本發(fā)明的硬件系統(tǒng)采用并行結構,明顯縮短了直線特征提取的時間。從PC機平臺的94.1ms的平均時間到FPGA平臺的20.8ms的平均時間,這樣的一個平均處理速度可以實現(xiàn)45-55的幀頻。除此之外,考慮到Spartan6XC6SLX45硬件資源的限制,比如塊RAM的量,因此對若干張分辨率高的高清圖片用ModelSim仿真,采用400MHz的頻率,本發(fā)明的平均處理時間接近23.2ms,這說明其處理速度為每秒43幀,所以在合適的頻率和足夠的資源下我們的硬件系統(tǒng)是能夠實現(xiàn)實時要求。綜上,本發(fā)明的硬件系統(tǒng)不僅保證了直線特征提取具有穩(wěn)定性好、準確性高、時間消耗少和內(nèi)存使用少的優(yōu)勢,而且本發(fā)明采用并行流水線結構,直線特征提取速度能夠滿足雙目測距系統(tǒng)要求。以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。當前第1頁1 2 3