0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于CORDIC的高速Sobel算法實現(xiàn)

SwM2_ChinaAET ? 來源:網(wǎng)絡(luò)整理 ? 作者:工程師陳翠 ? 2018-10-05 09:54 ? 次閱讀

圖像邊緣檢測是數(shù)字圖像處理領(lǐng)域中的一項關(guān)鍵技術(shù)[1-3],廣泛運用在軍事、農(nóng)業(yè)、工業(yè)、醫(yī)學、航天等領(lǐng)域[4-6]。隨著電子信息技術(shù)的快速發(fā)展,各大相關(guān)領(lǐng)域?qū)D像邊緣檢測技術(shù)提出更高的要求,即:在保證精度的前提下,即時處理大規(guī)模數(shù)據(jù)。

文獻[6]、[7]使用硬件并行技術(shù)和流水線技術(shù),大幅增加了數(shù)據(jù)的吞吐量,但在計算Sobel的梯度值時速度較慢,限制了系統(tǒng)的整體處理速度[6-7]。文獻[8]在文獻[6]、[7]的基礎(chǔ)上,解決了Sobel梯度值計算速度較慢的問題,使系統(tǒng)的整體處理速度提升[6-8],但該方法犧牲了精度,導致邊緣檢測的效果較差。

針對上述問題,本文采用優(yōu)化的CORDIC算法,將Sobel梯度計算公式轉(zhuǎn)換成數(shù)據(jù)的移位和相加的流水線操作,在保證運算精確度的前提下,大幅提高整體運算速度。

1 Sobel邊緣檢測算法

Sobel算子是一階導數(shù)的邊緣檢測算子,具有2組3×3的矩陣。圖像中的像素點分別和這兩個矩陣做卷積后,即可得到圖像的水平、垂直梯度。根據(jù)式(1)和式(2)得到圖像梯度值后,將該值和預設(shè)的閾值進行比較,即可判斷該點是不是圖像的邊緣部分。

圖1(a)為待處理的圖像數(shù)據(jù),圖1(b)、圖1(c)為用于計算x和y方向梯度值的卷積表。

基于CORDIC的高速Sobel算法實現(xiàn)

水平梯度Px、垂直梯度Py的計算公式如式(1)所示:

基于CORDIC的高速Sobel算法實現(xiàn)

式(1)可以利用兩個行緩沖器(Line_buffer)和流水線型的乘加器完成。如圖2所示,當預存滿兩個行緩沖器后,再等2個時鐘,系統(tǒng)即可實時地得到待處理的圖像數(shù)據(jù)。

基于CORDIC的高速Sobel算法實現(xiàn)

如圖3所示,得到待處理的圖像數(shù)據(jù)后,P02和P22直接進行加法運算,P12通過移位操作實現(xiàn)乘2效果。為降低D觸發(fā)器(Reg)之間的邏輯時延,增加系統(tǒng)的工作頻率,本文將P02和P22相加的結(jié)果、P12移位的結(jié)果寄存了一拍后,再進行加法運算。依據(jù)上述原理,對P02、P20和P10進行了類似操作。最后將兩組數(shù)據(jù)做減法,再取一個絕對值即可得到x方向的Sobel計算結(jié)果。y方向的Sobel計算方法如圖4所示,與圖3的原理類似。

基于CORDIC的高速Sobel算法實現(xiàn)

基于CORDIC的高速Sobel算法實現(xiàn)

最終梯度值可以根據(jù)梯度計算公式算出:

基于CORDIC的高速Sobel算法實現(xiàn)

依據(jù)式(2),即可得到最終梯度的模值|G|,將梯度的模值和閾值進行比較,就可以判斷出該點是否為邊緣點。關(guān)于梯度模值計算公式,文獻[6]和文獻[7]選擇調(diào)用IP核實現(xiàn)平方根運算,該方法在一定程度上保證了計算精度,但是運算速度受限。文獻[8]為解決這個問題,選擇將式(2)等效為|G|=|Px|+|Py|,較好地提高了運算速度,但是運算精度大幅度降低。

為解決上述問題,本文選擇用優(yōu)化的流水線型的CORDIC算法,實現(xiàn)式(2)的運算。該方法既保證了精度,又提高了運算速度。

2 CORDIC算法原理

2.1 圓周系統(tǒng)下的CORDIC算法

為在保證運算精度的前提下,提高Sobel 算法的即時處理速度和數(shù)據(jù)吞吐量,本文選擇使用CORDIC算法對其進行優(yōu)化。CORDIC是將復雜的計算轉(zhuǎn)換成移位和加法的迭代操作。CORDIC算法有旋轉(zhuǎn)模式和向量模式。在不同的坐標系下使用,可以實現(xiàn)不同的功能。因需要實現(xiàn)式(2),本文選用圓周坐標系下的向量模式。

2.2 向量模式

向量模式下通過一系列的角度逼近,可以進行反正切和平方根的計算。旋轉(zhuǎn)模式的完整迭代公式如式(3)所示。其中xi為當前的橫坐標值,yi為當前的縱坐標值,zi為當前的角度累加值。其中yi控制著判決算子δi的值,yi的值為正時,δi為負;yi的值為負時,δi為正。

基于CORDIC的高速Sobel算法實現(xiàn)

3 向量模式下CORDIC算法的優(yōu)化

為提高系統(tǒng)的總體性能,本文對CORDIC算法進行了一定優(yōu)化,最終提高了CORDIC算法的精度和速度。

3.1 覆蓋角度的擴展

如式(6)所示,CORDIC算法的旋轉(zhuǎn)角度有固定的規(guī)律,角度為2-i的反正切。當?shù)螖?shù)趨于無窮時,所有角度值之和約等于99.827°。由此可知,覆蓋角的度數(shù)為[-99.827°,99.827°],不能覆蓋圓周上的所有角度。

基于CORDIC的高速Sobel算法實現(xiàn)

考慮到只需求解式(2),輸入數(shù)據(jù)的符號變化不影響最終計算結(jié)果。因此在式(1)處,直接求取了|Px|、|Py|,通過該操作將所有數(shù)據(jù)計算限制在了第一象限。為減少迭代次數(shù),還可將輸入數(shù)據(jù)進行進一步的處理。將|Px|和|Py|進行比較,如果|Py|大于|Px|,則將|Py|和|Px|的值互換;如果|Px|的值大于|Py|,則|Py|和|Px|的值保持不變。預處理后,數(shù)據(jù)的象限限制在[0°,45°]。因此可以減少一級迭代,收斂域也因此變?yōu)閇-57.827°,54.827°]。經(jīng)過上述處理后,式(5)變化成式(7)。

基于CORDIC的高速Sobel算法實現(xiàn)

3.2 數(shù)據(jù)位擴展

CORDIC算法的迭代次數(shù)和運算數(shù)據(jù)的位寬對運算結(jié)果的精度有很大的影響。YU Y H在文獻[9]中提出了解決量化誤差(OQE)的方法。

YU Y H指出OQE由近似誤差和舍入誤差組成。近似誤差是由有限個確定旋轉(zhuǎn)角度量化CORDIC旋轉(zhuǎn)角度帶來的量化誤差,由最大向量模值和迭代次數(shù)決定。舍入誤差是因為計算時數(shù)據(jù)位不夠帶來的誤差,由數(shù)據(jù)的位寬決定。

增加數(shù)據(jù)位寬和迭代的次數(shù)都可以提高運算結(jié)果的精度。但是,當?shù)螖?shù)達到一定值后,迭代次數(shù)的增加對運算精度的影響變得很小。而增加運算數(shù)據(jù)的位寬將帶來較好的效果,大幅度降低舍入誤差。每增加一位數(shù)據(jù)位寬,舍入誤差將變小1/2[9]。本文在用CORDIC算法實現(xiàn)式(2)時,在保證較大的迭代次數(shù)的前提下,將運算數(shù)據(jù)位擴展3位,大幅度降低了舍入誤差。

在進行數(shù)據(jù)迭代運算時,考慮到采用浮點數(shù)可以降低工作頻率,因此采用了定點數(shù)。如圖5所示,定點數(shù)由符號位(S)、整數(shù)位(I)、小數(shù)位(D)構(gòu)成。

基于CORDIC的高速Sobel算法實現(xiàn)

3.3 優(yōu)化后CORDIC算法的實現(xiàn)

圓周模式下的向量模式可以根據(jù)輸入的|Px|和|Py|,直接求解出最終梯度的模值。梯度模值運算模塊的硬件結(jié)構(gòu)圖如圖6所示,由預處理、CORDIC迭代流水線、后級處理3部分組成。預處理部分中,將判斷|Px|和|Py|的值是否需要互換。因為迭代次數(shù)已經(jīng)提前確定,縮放因子已知,在預處理階段的數(shù)值修正部分可以提前對最終結(jié)果進行補償。補償后,將數(shù)據(jù)位數(shù)從24位擴展成27位。擴展后,舍入誤差將降低為之前的1/8,提高了運算的精確度。

基于CORDIC的高速Sobel算法實現(xiàn)

預處理后進入CORDIC迭代部分,迭代部分采用15級的流水線模式。根據(jù)式(3)可知,在求解式(2)時只需要知道|Px|和|Py|的值,因此可舍棄zi的計算,以此節(jié)約一些資源。如圖7所示,迭代部分的每行存在兩個移位寄存器和兩個加/減法器。符號控制信號為Sign,由yi決定。通過式(3)可知,當yi為正時,xi處選用加法器,yi處選用減法器;當yi為負時,xi處選用減法器,yi處選用加法器。

基于CORDIC的高速Sobel算法實現(xiàn)

數(shù)據(jù)通過迭代部分后,進入后級處理部分。后級處理部分將信號緩存一拍后,進行截位處理,然后就可得到x15[26:3]的值,即最終梯度的模值。此外,該設(shè)計采用了流水線結(jié)構(gòu),提高了吞吐量和最大工作頻率。

4 系統(tǒng)仿真及性能分析

本設(shè)計在ISE14.7軟件下,用Verilog HDL語言進行了實現(xiàn)。此外,使用MATLAB、Modelsim SE 10.1c進行了本設(shè)計的測試。

本文在Xilinx ISE編譯器中編譯好代碼后,通過Modelsim進行了軟件仿真。圖8為本設(shè)計關(guān)鍵路徑的仿真:CORDIC迭代運算的仿真。修正后的|Px|和|Py|采用定點數(shù)的方法進行表示,總計24位,0~12位為小數(shù)位,13~22位為整數(shù)位,23位為符號位。|Px[26:0]|和|Py[26:0]|為|Px|、|Py|擴展3位后的值,分別用x、y進行表示。Kn為最終梯度模值的計算結(jié)果。為了更直觀地表示,輸入值、中間值和輸出結(jié)果均用有符號十進制數(shù)進行表示。根據(jù)仿真結(jié)果可知,采用優(yōu)化后的CORDIC進行式(2)的運算,精確度約為10-4,遠大于文獻[8]的精確度。

仿真后,將文獻[8]的算法和本文的算法進行了對比測試,結(jié)果如圖9所示。通過圖9(b)可以觀察到,使用文獻[8]的加速算法后,因為精確度較低的緣故,不能較好地檢測到邊緣,人像左下方、右上方處的頭發(fā)邊緣和背景混雜在了一起,人像面部左下方、右上方的邊緣檢測效果較差。使用本文的改進算法后,如圖9(c)所示,在保證運算速度的前提下,較好地識別出了圖像的邊緣,較好地檢測出了頭發(fā)和面部的邊緣,與圖9(d)使用MATLAB實現(xiàn)Sobel算法的效果近似。

本文也嘗試使用Xilinx ISE自帶的平方根IP核實現(xiàn)關(guān)鍵路徑的計算。選用Spartan6 XC6SLX16 2CSG324C芯片在Xilinx ISE14.7軟件平臺下,對平方根IP核進行編譯綜合。編譯綜合后,得到ISE計算出的最高工作頻率信息。為測試本文使用算法的性能,在同樣的條件下,對本文的算法也進行了編譯,得到了最高工作頻率信息。最終結(jié)果如表1所示。采用IP核進行關(guān)鍵路徑的計算,最高工作頻率為114.745 MHz。采用優(yōu)化后的CORDIC算法進行關(guān)鍵路徑的計算,最高頻率為187.652 MHz。相比使用IP核的方法,采用優(yōu)化后的CORDIC算法實現(xiàn)關(guān)鍵路徑的計算可以提速63.53%。

基于CORDIC的高速Sobel算法實現(xiàn)

5 結(jié)論

本文在傳統(tǒng)Sobel加速算法的基礎(chǔ)上,在FPGA平臺上使用優(yōu)化的CORDIC算法實現(xiàn)了Sobel算法加速。通過圖9可知,該方法的邊緣檢測效果良好,較好地檢測出了圖像的邊緣。通過表1可知,該方法與調(diào)用IP核相比提高了百分之63.53%的工作頻率。實驗結(jié)果表明,本設(shè)計進一步提高了系統(tǒng)的運算速度,適合在對速度有較高要求的系統(tǒng)中使用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • CORDIC
    +關(guān)注

    關(guān)注

    0

    文章

    37

    瀏覽量

    19921
  • sobel
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    7871

原文標題:【學術(shù)論文】基于CORDIC的高速Sobel算法實現(xiàn)

文章出處:【微信號:ChinaAET,微信公眾號:電子技術(shù)應用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于改進的CORDIC算法的FFT復乘及其FPGA實現(xiàn)

    耗費了FFT運算中大量的乘法器資源。CORDIC算法只需簡單的移位與加減運算就能實現(xiàn)向量旋轉(zhuǎn),具有使用資源少、硬件規(guī)模小等優(yōu)勢。因此在FFT蝶形運算中用其代替?zhèn)鹘y(tǒng)FFT運算中的復數(shù)乘法器,可以獲得更好
    發(fā)表于 07-11 21:32

    CORDIC算法求助

    請問CORDIC算法用verilog算法實現(xiàn)時,角度累加器中的45度,26.56度,14.04度怎么跟verilog語言相對應?
    發(fā)表于 07-11 20:18

    基于FPGA的Sobel邊緣檢測的實現(xiàn)

    我們在此基礎(chǔ)上修改,從而實現(xiàn),基于FPGA的動態(tài)圖片的Sobel邊緣檢測、中值濾波、Canny算子邊緣檢測、腐蝕和膨脹等。那么這篇文章我們將來實現(xiàn)基于FPGA的Sobel邊緣檢測。圖像
    發(fā)表于 08-29 15:41

    基于FPGA的邊緣檢測和Sobel算法

    轉(zhuǎn)帖摘要: 針對嵌入式軟件無法滿足數(shù)字圖像實時處理速度問題,提出用硬件加速器的思想,通過FPGA實現(xiàn)Sobel邊緣檢測算法。通過乒乓操作、并行處理數(shù)據(jù)和流水線設(shè)計,大大提高算法的處理速
    發(fā)表于 11-29 08:57

    FPGA設(shè)計中必須掌握的Cordic算法

    大多數(shù)工程師在碰到需要在 FPGA 中實現(xiàn)諸如正弦、余弦或開平方這樣的數(shù)學函數(shù)時,首先會想到的是用查找表,可能再結(jié)合線性內(nèi)插或者冪級數(shù)(如果有乘法器可用)。不過對這種工作來說,CORDIC 算法
    發(fā)表于 09-19 09:07

    怎么利用CORDIC算法在FPGA上實現(xiàn)高速自然對數(shù)變換器?

    本文利用CORDIC算法在FPGA上實現(xiàn)高速自然對數(shù)變換器。
    發(fā)表于 04-30 06:05

    高性能HPOR CORDIC算法實現(xiàn)

    CORDIC 算法在通信和圖像處理等各個領(lǐng)域有著廣泛的應用,但是浮點CORDIC 由于迭代延時大且實現(xiàn)復雜沒有得到很好的應用,本文提出了一種修正浮點
    發(fā)表于 12-15 14:27 ?15次下載

    基于CORDIC算法的NCO實現(xiàn)

    基于CORDIC 算法的NCO 實現(xiàn)田力, 馮琦(西安電子科技大學 電路設(shè)計研究所,陜西 西安 710071)摘要:NCO 在信號處理方面有著廣泛的應用。而函數(shù)發(fā)生器是NCO 中的關(guān)鍵部分,
    發(fā)表于 12-15 14:30 ?23次下載

    基于CORDIC算法的載波同步鎖相環(huán)設(shè)計

    研究了一種利用CORDIC算法的矢量及旋轉(zhuǎn)模式對載波同步中相位偏移進行估計并校正的方法。設(shè)計并實現(xiàn)了基于CORDIC算法的數(shù)字鎖相環(huán)。通過仿
    發(fā)表于 12-15 14:49 ?0次下載
    基于<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的載波同步鎖相環(huán)設(shè)計

    雙模式CORDIC算法的FPGA實現(xiàn)

    CORDIC算法將復雜的算術(shù)運算轉(zhuǎn)化為簡單的加法和移位操作,然后逐次逼近結(jié)果。這種方法很好的兼顧了精度、速度和硬件復雜度,它與VLSI技術(shù)的結(jié)合對DSP算法的硬件實現(xiàn)具有極大的意義
    發(fā)表于 06-27 17:27 ?66次下載
    雙模式<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的FPGA<b class='flag-5'>實現(xiàn)</b>

    基于CORDIC算法高速ODDFS電路設(shè)計

    為了滿足現(xiàn)代高速通信中頻率快速轉(zhuǎn)換的需求,基于坐標旋轉(zhuǎn)數(shù)字計算(CORDIC,Coordinate Rotation Digital Computer)算法完成正交直接數(shù)字頻率合成(ODDFS,Orthogonal Direct
    發(fā)表于 02-22 16:26 ?34次下載
    基于<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的<b class='flag-5'>高速</b>ODDFS電路設(shè)計

    cordic算法verilog實現(xiàn)(簡單版)

    cordic算法verilog實現(xiàn)(簡單版)(轉(zhuǎn)載)module cordic(clk, phi, cos, sin); parameter W = 13, W_Z = 14; in
    發(fā)表于 02-11 03:06 ?3206次閱讀
    <b class='flag-5'>cordic</b><b class='flag-5'>算法</b>verilog<b class='flag-5'>實現(xiàn)</b>(簡單版)

    高速低功耗CORDIC算法的研究與實現(xiàn)

    針對傳統(tǒng)CORDIC算法流水線結(jié)構(gòu)的迭代次數(shù)過多,運算速度不夠快,消耗硬件資源較多的缺點,改進了一種基于旋轉(zhuǎn)模式并行運算的CORDIC算法。該算法
    發(fā)表于 11-16 10:46 ?14次下載
    <b class='flag-5'>高速</b>低功耗<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的研究與<b class='flag-5'>實現(xiàn)</b>

    基于FPGA的Cordic算法實現(xiàn)的設(shè)計與驗證

    本文是基于FPGA實現(xiàn)Cordic算法的設(shè)計與驗證,使用Verilog HDL設(shè)計,初步可實現(xiàn)正弦、余弦、反正切函數(shù)的實現(xiàn)。將復雜的運算轉(zhuǎn)化
    發(fā)表于 07-03 10:18 ?2575次閱讀
    基于FPGA的<b class='flag-5'>Cordic</b><b class='flag-5'>算法</b><b class='flag-5'>實現(xiàn)</b>的設(shè)計與驗證

    使用Verilog HDL設(shè)計實現(xiàn)Cordic算法

    任何適合產(chǎn)品實現(xiàn)算法,都是將簡易實現(xiàn)作為第一目標。CORDIC算法是建立在適應性濾波器、FFT、解調(diào)器等眾多應用基礎(chǔ)上計算超越函數(shù)的方法。
    的頭像 發(fā)表于 08-16 11:21 ?2171次閱讀
    使用Verilog HDL設(shè)計<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>Cordic</b><b class='flag-5'>算法</b>