一種基于cordic算法的圖像旋轉(zhuǎn)vlsi結(jié)構(gòu)的制作方法
【專利摘要】本發(fā)明屬于VLSI結(jié)構(gòu)設計領域,為一種基于CORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu)。該結(jié)構(gòu)采用CORDIC算法來計算原圖像旋轉(zhuǎn)一定角度過后的新坐標,采用雙線性插值算法來計算新坐標下的圖像像素值。本發(fā)明只用了移位和加減操作,采用13級流水線設計了CORDIC算法的硬件結(jié)構(gòu),有效改善了傳統(tǒng)CORDIC算法中由于包含乘法操作而出現(xiàn)的關鍵時序過長,速度過慢的問題。本發(fā)明采用兩級流水線實現(xiàn)了雙線性插值算法的硬件結(jié)構(gòu);通過控制單元使得CORDIC單元,存儲單元和雙線性插值單元相互配合完成圖像的旋轉(zhuǎn)。與現(xiàn)有的圖像旋轉(zhuǎn)硬件實現(xiàn)方法相比,本發(fā)明具有面積小,速度快的優(yōu)點,可以有效應用于實時圖像旋轉(zhuǎn)處理中。
【專利說明】—種基于CORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu)
所屬【技術領域】
[0001]本發(fā)明屬于超大規(guī)模集成電路(VLSI)結(jié)構(gòu)設計領域,具體涉及到一種基于CORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu)。
【背景技術】
[0002]數(shù)字圖像旋轉(zhuǎn)是數(shù)字圖像處理中很重要的一個步驟,它被廣泛應用于醫(yī)療圖像識另IJ,機器人技術,條碼識別等領域。在圖像旋轉(zhuǎn)中,速度和精度是評估圖像旋轉(zhuǎn)單元質(zhì)量的兩個最為關鍵的因素。
[0003]現(xiàn)在應用最廣泛的圖像旋轉(zhuǎn)方法都是基于軟件實現(xiàn)的。由于軟件是順序執(zhí)行代碼,速度較慢,很難適應高精度圖像處理和實時圖像處理的要求。于是通過硬件結(jié)構(gòu)實現(xiàn)圖像旋轉(zhuǎn)成為一種需求。硬件并行處理多個單元,可有效提高圖像處理速度。
[0004]現(xiàn)在主要有三種硬件實現(xiàn)圖像旋轉(zhuǎn)的方法。第一種傳統(tǒng)的圖像旋轉(zhuǎn)方法使用乘法器和包含三角函數(shù)的查找表(LUTs)來實現(xiàn)。由于使用了較多乘法器,采用這種方法實現(xiàn)的圖像旋轉(zhuǎn)系統(tǒng)結(jié)構(gòu)復雜,精度低,速度慢,很難適應現(xiàn)代圖像處理的應用。第二種方法分解旋轉(zhuǎn)矩陣,通過一系列的數(shù)學變換來實現(xiàn)圖像旋轉(zhuǎn)。第三種方法采用C0RDIC(thecoordinate rotational digital computer,坐標旋轉(zhuǎn)計算機)算法來實現(xiàn)圖像旋轉(zhuǎn)。CORDIC算法是用來計算一些常用的基本運算函數(shù)和算術操作的循環(huán)迭代算法,其基本思想是用一系列特殊的角度旋轉(zhuǎn)逼近向量需要旋轉(zhuǎn)的角度。
[0005]最早將CORDIC算法應用到圖像旋轉(zhuǎn)硬件實現(xiàn)中的是Ghosh和Majumdar。他們設計了一款ASIC芯片,將一幀圖像分解成若干個窗口,然后通過并行和流水線結(jié)構(gòu)并行地旋轉(zhuǎn)每個窗口來實現(xiàn)圖像旋轉(zhuǎn)。Suchitra在他的論文中也提出了一種新穎的基于窗口的旋轉(zhuǎn)算法,這種算法具有較高的吞吐率。基于窗口的圖像旋轉(zhuǎn)算法無可避免地會在旋轉(zhuǎn)過后的圖像中引入部分失真,這對于越來越注重用戶體驗的電子產(chǎn)品來說是不可容忍的。李杰明和鄭學仁提出了一種基于CORDIC算法的數(shù)字圖像旋轉(zhuǎn)的硬件實現(xiàn)結(jié)構(gòu),但他們?nèi)匀粵]有解決CORDIC算法的最后需要使用乘法器來進行模校正的問題。
【發(fā)明內(nèi)容】
[0006]本發(fā)明提出了一種新穎的基于CORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu),該結(jié)構(gòu)在硬件實現(xiàn)時可以減少芯片的面積,提供芯片的工作速度,充分發(fā)揮硬件的并行和流水線的速度優(yōu)勢。
[0007]本發(fā)明提供的基于CORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu),其特征在于:它包括分頻單元,CORDIC單元,地址產(chǎn)生單元,數(shù)據(jù)準備單元,雙線性插值單元以及數(shù)據(jù)存儲單元。
[0008]分頻單元將主時鐘進行6分頻。
[0009]CORDIC單元用于將輸入的坐標按照輸入的角度計算出旋轉(zhuǎn)過后的新坐標。
[0010]地址產(chǎn)生單元用于產(chǎn)生新像素點的地址以及需要新圖像像素點的坐標。
[0011]數(shù)據(jù)準備單元接收CORDIC單元輸出的新坐標的整數(shù)部分,并根據(jù)新坐標的整數(shù)部分求出其相鄰的四個像素點的像素值,輸出給雙線性插值單元。
[0012]雙線性插值單元接收數(shù)據(jù)準備單元輸出的四個像素點的值以及CORDIC單元輸出的新坐標的小數(shù)部分,由此來計算出新坐標點的像素值。
[0013]數(shù)據(jù)存儲單元分為兩部分。第一部分存儲由攝像頭采集到的原始數(shù)據(jù),第二部分存儲處理過后的像素點的像素值。
[0014]本發(fā)明一般配合采集用的攝像頭以及可以顯示圖像的IXD—起使用。攝像頭采集到數(shù)據(jù)過后,系統(tǒng)將數(shù)據(jù)存儲在數(shù)據(jù)存儲單元中。然后通過一個使用信號告訴圖像旋轉(zhuǎn)電路開始工作。地址產(chǎn)生單元接收到使能信號過后,通過計數(shù)器,開始依次產(chǎn)生新圖像的坐標以及新圖像的像素在數(shù)據(jù)存儲單元中的存儲地址。新圖像的坐標和旋轉(zhuǎn)角度送到CORDIC單元中,CORDIC單元使用8級流水線對坐標進行旋轉(zhuǎn)。每一級將坐標順時針或者逆時針方向旋轉(zhuǎn)arctar^H1—1)度(i指第i級流水線)。使用8級流水線對坐標旋轉(zhuǎn)過后,旋轉(zhuǎn)精度可以達到0.4476度,可以滿足實際的要求。坐標旋轉(zhuǎn)過后,由于基本的旋轉(zhuǎn)改變了矢量的
模長,所以需要乘上一個模校正系數(shù)料《) = fi(l + 2_2')_1/2來修正模長,k(n)是一個收斂的函
數(shù)。當n趨于無窮大時,k(n)趨近于一個固定值(0.60725)。直接在流水線結(jié)構(gòu)之后附加乘法器的直接實現(xiàn)方法使原本由移位器和加法器組成的整體結(jié)構(gòu)變得不規(guī)則,同時乘法器占用很大資源且會降低整個流水線的吞吐率。本發(fā)明中通過將k(n)進行因式分解,將其轉(zhuǎn)變?yōu)橐莆缓图訙p法運算,最終使用5級流水線替代了模校正乘法,進一步降低了硬件復雜度,使整體結(jié)構(gòu)規(guī)則統(tǒng)一,有利于硬件實現(xiàn)。
[0015]通過移位以及加減操作計算出新坐標對應于原始圖像中的坐標,此坐標包含有整數(shù)部分以及小數(shù)部分。CORDIC單元將整數(shù)部分輸出給數(shù)據(jù)準備單元,數(shù)據(jù)準備單元計算出此坐標相鄰的四個點的坐標,并從數(shù)據(jù)存儲模塊中讀出這四個坐標的像素值,然后將這四個像素值傳給雙線性插值單元。
[0016]雙線性插值單元接收數(shù)據(jù)準備單元輸出的四個像素值以及CORDIC單元輸出的坐標小數(shù)部分,并由此計算出新坐標的像素值,存入數(shù)據(jù)存儲單元中。
[0017]當所有的新坐標的像素值都已經(jīng)計算出來并存儲在數(shù)據(jù)存儲單元中后,一幅圖像完成旋轉(zhuǎn)。本發(fā)明與其他數(shù)字圖像旋轉(zhuǎn)方法相比較有如下優(yōu)勢:
[0018](I)采用全硬件實現(xiàn)?;贑ORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu)可以很方便的在FPGA 上實現(xiàn)以及米用 ASIC (Application Specific Integrated Circuit)實現(xiàn)。
[0019](2)引入流水線結(jié)構(gòu),提高了整個系統(tǒng)的速度。在CORDIC單元中設計了 8級流水線實現(xiàn)坐標旋轉(zhuǎn),然后設計了 5級流水線來替代模校正乘法。在雙線性插值單元中設計了兩級流水線,節(jié)約了乘法器,提高了吞吐率。
[0020](3)通過地址產(chǎn)生單元,數(shù)據(jù)準備單元和分頻單元,使系統(tǒng)統(tǒng)一工作,不會出現(xiàn)時序錯誤。
【專利附圖】
【附圖說明】
[0021]圖1為基于CORDIC算法的圖像旋轉(zhuǎn)VLSI總體結(jié)構(gòu)示意圖
[0022]圖2為CORDIC單元的流水線結(jié)構(gòu)
[0023]圖3為雙線性插值算法示意圖[0024]圖4為雙線性插值單元的流水線結(jié)構(gòu)
【具體實施方式】
[0025](I)地址產(chǎn)生單元
[0026]地址產(chǎn)生單元采用了計數(shù)器來依次產(chǎn)生旋轉(zhuǎn)過后新圖像中的坐標,然后送往CORDIC單元尋找對應于原圖像中的坐標。
[0027](2) CORDIC 單元
[0028]需要旋轉(zhuǎn)的角度與需要進行旋轉(zhuǎn)的坐標將被送往CORDIC單元。CORDIC單元中設計了 8級流水線實現(xiàn)坐標旋轉(zhuǎn),然后設計了 5級流水線來替代模校正乘法,總共13級流水線。CORDIC單元的流水線結(jié)構(gòu)如附圖圖2所示。在CORDIC單元中,首先將輸入的坐標值左移4位,將低4位擴展為坐標的小數(shù)部分。設輸入的坐標為(X,y),(X’,y’)為原圖像中的對應坐標。那么(x,y)與(x’,y’ )的對應關系為:
[0029]X1 = cos 0 (x+ytan 0 )(I)
[0030]Y1 = cos 0 (y-xtan 0 )
[0031]令0 等于 arctan2_i (i 為整數(shù)),則 tan 0 = 2_1,COs0 = 1/-71 + 2'2'。令 k = cos 0 ,則式⑴變?yōu)?
[0032]X' = k(x+y2_i)
[0033](2)
[0034]Y1 = k(y-x2_i)`
[0035]通過式(2)我們只能計算出特定角度(arctar^l的旋轉(zhuǎn)坐標。要計算圖像旋轉(zhuǎn)任意角度過后的坐標位置,我們可以將角度e進行分解,讓它可以用一系列分解的角度Qi來進行線性表示:
[0036]0 = S1O^S2Q2+...+ 6nan(3)
[0037]其中Si = ±1, a j = arctan2-(1-1)。
[0038]S 4代表每次旋轉(zhuǎn)的方向。另Zi = 0「0 H,則有=Zi = Zp1-S i a i
[0039]這樣通過若干次迭代旋轉(zhuǎn),可以很精確地求出坐標旋轉(zhuǎn)后的新坐標。
[0040]Xi = kj (Xh+ 6 AVh)
[0041]Yi = ki (Yi^1- 6 A1Xh)(4)
[0042]Zi = Zh_ S i a i
[0043]式(4)就是CORDIC算法的基本旋轉(zhuǎn)公式??梢钥闯鯟ORDIC算法是由一系列簡單的移位和加法操作組成的。它實際上是一種逐次逼近的坐標旋轉(zhuǎn)方法,每次旋轉(zhuǎn)都使累加的旋轉(zhuǎn)角度之和與目標旋轉(zhuǎn)角更接近。迭代次數(shù)n越大,旋轉(zhuǎn)的角度就與真是的角度越接近。
[0044]在CORDIC單元中,我們引入了變量Zi來判斷每級流水線旋轉(zhuǎn)的方向。每級流水
線只對坐標進行移位和加減操作,在最后需要乘以模校正因子&(?) = |1(1 + 2_2')_1/2。1^(11)
0
是一個收斂的函數(shù)。當n趨于無窮大時,k(n)趨近于一個固定值(0.60725)。本發(fā)明中將k(n)進行了因式分解,得到
[0045]k= I (I+ 2—2)(1-2-5)(1 + 2-8)(1-2-10) *0.60725(5)
[0046]這樣,模校正乘法就轉(zhuǎn)變?yōu)橐莆缓图訙p法運算,最終使用5級流水線替代了模校正乘法,進一步降低了硬件復雜度,使整體結(jié)構(gòu)規(guī)則統(tǒng)一,有利于硬件實現(xiàn)。
[0047](3)數(shù)據(jù)準備單元
[0048]CORDIC單元得到的坐標是一個浮點數(shù)。要求取旋轉(zhuǎn)過后的坐標對應于原圖像中的像素值需要進行雙線性插值。要進行雙線性插值則需知道CORDIC單元求得的坐標在原圖像中最鄰近4個點的像素值。數(shù)據(jù)準備單元就是要根據(jù)CORDIC單元產(chǎn)生的坐標值求得這四個像素值。
[0049]數(shù)據(jù)準備單元首先提取出輸入坐標的整數(shù)部分,設為(x,y)。則輸入坐標最鄰近的四個點的坐標分別為(X, y), (X, y+1), (x+1, y), (x+1, y+1)。數(shù)據(jù)準備單元在數(shù)據(jù)存儲單元中查找這四個點所對應的像素值,然后將其傳給雙線性插值單元進行插值操作。
[0050](4)雙線性插值單元
[0051]雙線性插值單元的輸入為從數(shù)據(jù)準備單元輸出的四個像素值以及CORDIC單元輸出坐標的小數(shù)部分。如附圖圖3所示,P(x’,y’)為CORDIC輸出的坐標,與其相鄰的四個點A,B,C,D的像素值由數(shù)據(jù)準備單元輸出,我們可以通過這四個點的像素值求出P(x’,y’ )點的像素值。雙線性插值的公式如式(5)所示:
[0052]fxl = fA(l-dx) +fBdx
[0053]fx2 = fc (1-dx) +fddx(6)
[0054]fp = fxl(l-dy)+fx2dy·[0055]其中,fA,fB, fc, fd, fxl, fx2 和 fp 分別是 A,B,C,D,XI,X2 和 P 點的像素值。對于式(6),我們可以通過兩級流水線來實現(xiàn),每級流水線上需要經(jīng)過一次乘法和一次加法。具體結(jié)構(gòu)如附圖圖4所示。值得注意的是小數(shù)部分dx,dy是用整數(shù)表示的。l-dx,l-dy需要對I進行相應的左移以滿足位數(shù)的對齊。最后得到的像素值需要進行相應位數(shù)的右移,最后得到P點的像素值,并將其存入數(shù)據(jù)存儲單元中。
【權(quán)利要求】
1.一種基于CORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu),其特征在于:它包括分頻單元(I)、CORDIC單元(2),地址產(chǎn)生單元(3),數(shù)據(jù)準備單元(4),雙線性插值單元(5)、數(shù)據(jù)存儲單元(6);分頻單元(I)將輸入時鐘進行六分頻,將分頻過后的時鐘輸出給CORDIC單元(2)、地址產(chǎn)生單元(3)以及雙線性插值單元(5) ;C0RDIC單元(2)接收坐標以及旋轉(zhuǎn)角度,將旋轉(zhuǎn)過后的坐標輸出給數(shù)據(jù)準備單元(4);地址產(chǎn)生單元(3)依次產(chǎn)生旋轉(zhuǎn)過后的圖像的坐標;數(shù)據(jù)準備單元(4)根據(jù)CORDIC單元(2)輸入的坐標,找出那個點相鄰四個點的像素值并輸出給雙線性插值單元(5);雙線性插值單元(5)根據(jù)CORDIC單元(2)輸出的坐標以及數(shù)據(jù)準備單元(4)輸出的四個點的像素值求得對應坐標的像素值并存入數(shù)據(jù)存儲單元(6)中。
2.根據(jù)權(quán)利要求1所描述的基于CORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu),其特征還在于CORDIC單元(2)采用8級移位加法流水線對坐標進行旋轉(zhuǎn),然后再用5級移位加法流水線對旋轉(zhuǎn)過后的值進行模校正,總共使用13級只包換移位和加法的流水線完成CORDIC算法,可將圖像旋轉(zhuǎn)至任意角度,精度為0.4476度。
3.根據(jù)權(quán)利要求1所描述的基于CORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu),其特征還在于數(shù)據(jù)準備單元(4)采用有限狀態(tài)機實現(xiàn),采用六個狀態(tài)求取當前坐標最鄰近的四個點的像素值并分別輸出給雙線性插值單元(5)。
4.根據(jù)權(quán)利要求1所描述的基于CORDIC算法的圖像旋轉(zhuǎn)VLSI結(jié)構(gòu),其特征還在于雙線性插值單元(5)采用兩 級流水線實現(xiàn),提高系統(tǒng)的速度。
【文檔編號】G06T3/60GK103578078SQ201210264488
【公開日】2014年2月12日 申請日期:2012年7月30日 優(yōu)先權(quán)日:2012年7月30日
【發(fā)明者】陳怡 , 張萌, 陳均 申請人:陳怡 , 張萌, 陳均