一种基于cordic算法的图像旋转vlsi结构的制作方法

文档序号:6487398阅读:167来源:国知局
一种基于cordic算法的图像旋转vlsi结构的制作方法
【专利摘要】本发明属于VLSI结构设计领域,为一种基于CORDIC算法的图像旋转VLSI结构。该结构采用CORDIC算法来计算原图像旋转一定角度过后的新坐标,采用双线性插值算法来计算新坐标下的图像像素值。本发明只用了移位和加减操作,采用13级流水线设计了CORDIC算法的硬件结构,有效改善了传统CORDIC算法中由于包含乘法操作而出现的关键时序过长,速度过慢的问题。本发明采用两级流水线实现了双线性插值算法的硬件结构;通过控制单元使得CORDIC单元,存储单元和双线性插值单元相互配合完成图像的旋转。与现有的图像旋转硬件实现方法相比,本发明具有面积小,速度快的优点,可以有效应用于实时图像旋转处理中。
【专利说明】—种基于CORDIC算法的图像旋转VLSI结构
所属【技术领域】
[0001]本发明属于超大规模集成电路(VLSI)结构设计领域,具体涉及到一种基于CORDIC算法的图像旋转VLSI结构。
【背景技术】
[0002]数字图像旋转是数字图像处理中很重要的一个步骤,它被广泛应用于医疗图像识另IJ,机器人技术,条码识别等领域。在图像旋转中,速度和精度是评估图像旋转单元质量的两个最为关键的因素。
[0003]现在应用最广泛的图像旋转方法都是基于软件实现的。由于软件是顺序执行代码,速度较慢,很难适应高精度图像处理和实时图像处理的要求。于是通过硬件结构实现图像旋转成为一种需求。硬件并行处理多个单元,可有效提高图像处理速度。
[0004]现在主要有三种硬件实现图像旋转的方法。第一种传统的图像旋转方法使用乘法器和包含三角函数的查找表(LUTs)来实现。由于使用了较多乘法器,采用这种方法实现的图像旋转系统结构复杂,精度低,速度慢,很难适应现代图像处理的应用。第二种方法分解旋转矩阵,通过一系列的数学变换来实现图像旋转。第三种方法采用C0RDIC(thecoordinate rotational digital computer,坐标旋转计算机)算法来实现图像旋转。CORDIC算法是用来计算一些常用的基本运算函数和算术操作的循环迭代算法,其基本思想是用一系列特殊的角度旋转逼近向量需要旋转的角度。
[0005]最早将CORDIC算法应用到图像旋转硬件实现中的是Ghosh和Majumdar。他们设计了一款ASIC芯片,将一帧图像分解成若干个窗口,然后通过并行和流水线结构并行地旋转每个窗口来实现图像旋转。Suchitra在他的论文中也提出了一种新颖的基于窗口的旋转算法,这种算法具有较高的吞吐率。基于窗口的图像旋转算法无可避免地会在旋转过后的图像中引入部分失真,这对于越来越注重用户体验的电子产品来说是不可容忍的。李杰明和郑学仁提出了一种基于CORDIC算法的数字图像旋转的硬件实现结构,但他们仍然没有解决CORDIC算法的最后需要使用乘法器来进行模校正的问题。

【发明内容】

[0006]本发明提出了一种新颖的基于CORDIC算法的图像旋转VLSI结构,该结构在硬件实现时可以减少芯片的面积,提供芯片的工作速度,充分发挥硬件的并行和流水线的速度优势。
[0007]本发明提供的基于CORDIC算法的图像旋转VLSI结构,其特征在于:它包括分频单元,CORDIC单元,地址产生单元,数据准备单元,双线性插值单元以及数据存储单元。
[0008]分频单元将主时钟进行6分频。
[0009]CORDIC单元用于将输入的坐标按照输入的角度计算出旋转过后的新坐标。
[0010]地址产生单元用于产生新像素点的地址以及需要新图像像素点的坐标。
[0011]数据准备单元接收CORDIC单元输出的新坐标的整数部分,并根据新坐标的整数部分求出其相邻的四个像素点的像素值,输出给双线性插值单元。
[0012]双线性插值单元接收数据准备单元输出的四个像素点的值以及CORDIC单元输出的新坐标的小数部分,由此来计算出新坐标点的像素值。
[0013]数据存储单元分为两部分。第一部分存储由摄像头采集到的原始数据,第二部分存储处理过后的像素点的像素值。
[0014]本发明一般配合采集用的摄像头以及可以显示图像的IXD—起使用。摄像头采集到数据过后,系统将数据存储在数据存储单元中。然后通过一个使用信号告诉图像旋转电路开始工作。地址产生单元接收到使能信号过后,通过计数器,开始依次产生新图像的坐标以及新图像的像素在数据存储单元中的存储地址。新图像的坐标和旋转角度送到CORDIC单元中,CORDIC单元使用8级流水线对坐标进行旋转。每一级将坐标顺时针或者逆时针方向旋转arctar^H1—1)度(i指第i级流水线)。使用8级流水线对坐标旋转过后,旋转精度可以达到0.4476度,可以满足实际的要求。坐标旋转过后,由于基本的旋转改变了矢量的
模长,所以需要乘上一个模校正系数料《) = fi(l + 2_2')_1/2来修正模长,k(n)是一个收敛的函
数。当n趋于无穷大时,k(n)趋近于一个固定值(0.60725)。直接在流水线结构之后附加乘法器的直接实现方法使原本由移位器和加法器组成的整体结构变得不规则,同时乘法器占用很大资源且会降低整个流水线的吞吐率。本发明中通过将k(n)进行因式分解,将其转变为移位和加减法运算,最终使用5级流水线替代了模校正乘法,进一步降低了硬件复杂度,使整体结构规则统一,有利于硬件实现。
[0015]通过移位以及加减操作计算出新坐标对应于原始图像中的坐标,此坐标包含有整数部分以及小数部分。CORDIC单元将整数部分输出给数据准备单元,数据准备单元计算出此坐标相邻的四个点的坐标,并从数据存储模块中读出这四个坐标的像素值,然后将这四个像素值传给双线性插值单元。
[0016]双线性插值单元接收数据准备单元输出的四个像素值以及CORDIC单元输出的坐标小数部分,并由此计算出新坐标的像素值,存入数据存储单元中。
[0017]当所有的新坐标的像素值都已经计算出来并存储在数据存储单元中后,一幅图像完成旋转。本发明与其他数字图像旋转方法相比较有如下优势:
[0018](I)采用全硬件实现。基于CORDIC算法的图像旋转VLSI结构可以很方便的在FPGA 上实现以及米用 ASIC (Application Specific Integrated Circuit)实现。
[0019](2)引入流水线结构,提高了整个系统的速度。在CORDIC单元中设计了 8级流水线实现坐标旋转,然后设计了 5级流水线来替代模校正乘法。在双线性插值单元中设计了两级流水线,节约了乘法器,提高了吞吐率。
[0020](3)通过地址产生单元,数据准备单元和分频单元,使系统统一工作,不会出现时序错误。
【专利附图】

【附图说明】
[0021]图1为基于CORDIC算法的图像旋转VLSI总体结构示意图
[0022]图2为CORDIC单元的流水线结构
[0023]图3为双线性插值算法示意图[0024]图4为双线性插值单元的流水线结构
【具体实施方式】
[0025](I)地址产生单元
[0026]地址产生单元采用了计数器来依次产生旋转过后新图像中的坐标,然后送往CORDIC单元寻找对应于原图像中的坐标。
[0027](2) CORDIC 单元
[0028]需要旋转的角度与需要进行旋转的坐标将被送往CORDIC单元。CORDIC单元中设计了 8级流水线实现坐标旋转,然后设计了 5级流水线来替代模校正乘法,总共13级流水线。CORDIC单元的流水线结构如附图图2所示。在CORDIC单元中,首先将输入的坐标值左移4位,将低4位扩展为坐标的小数部分。设输入的坐标为(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 为整数),则 tan 0 = 2_1,COs0 = 1/-71 + 2'2'。令 k = cos 0 ,则式⑴变为:
[0032]X' = k(x+y2_i)
[0033](2)
[0034]Y1 = k(y-x2_i)`
[0035]通过式(2)我们只能计算出特定角度(arctar^l的旋转坐标。要计算图像旋转任意角度过后的坐标位置,我们可以将角度e进行分解,让它可以用一系列分解的角度Qi来进行线性表示:
[0036]0 = S1O^S2Q2+...+ 6nan(3)
[0037]其中Si = ±1, a j = arctan2-(1-1)。
[0038]S 4代表每次旋转的方向。另Zi = 0「0 H,则有=Zi = Zp1-S i a i
[0039]这样通过若干次迭代旋转,可以很精确地求出坐标旋转后的新坐标。
[0040]Xi = kj (Xh+ 6 AVh)
[0041]Yi = ki (Yi^1- 6 A1Xh)(4)
[0042]Zi = Zh_ S i a i
[0043]式(4)就是CORDIC算法的基本旋转公式。可以看出CORDIC算法是由一系列简单的移位和加法操作组成的。它实际上是一种逐次逼近的坐标旋转方法,每次旋转都使累加的旋转角度之和与目标旋转角更接近。迭代次数n越大,旋转的角度就与真是的角度越接近。
[0044]在CORDIC单元中,我们引入了变量Zi来判断每级流水线旋转的方向。每级流水
线只对坐标进行移位和加减操作,在最后需要乘以模校正因子&(?) = |1(1 + 2_2')_1/2。1^(11)






0
是一个收敛的函数。当n趋于无穷大时,k(n)趋近于一个固定值(0.60725)。本发明中将k(n)进行了因式分解,得到
[0045]k= I (I+ 2—2)(1-2-5)(1 + 2-8)(1-2-10) *0.60725(5)
[0046]这样,模校正乘法就转变为移位和加减法运算,最终使用5级流水线替代了模校正乘法,进一步降低了硬件复杂度,使整体结构规则统一,有利于硬件实现。
[0047](3)数据准备单元
[0048]CORDIC单元得到的坐标是一个浮点数。要求取旋转过后的坐标对应于原图像中的像素值需要进行双线性插值。要进行双线性插值则需知道CORDIC单元求得的坐标在原图像中最邻近4个点的像素值。数据准备单元就是要根据CORDIC单元产生的坐标值求得这四个像素值。
[0049]数据准备单元首先提取出输入坐标的整数部分,设为(x,y)。则输入坐标最邻近的四个点的坐标分别为(X, y), (X, y+1), (x+1, y), (x+1, y+1)。数据准备单元在数据存储单元中查找这四个点所对应的像素值,然后将其传给双线性插值单元进行插值操作。
[0050](4)双线性插值单元
[0051]双线性插值单元的输入为从数据准备单元输出的四个像素值以及CORDIC单元输出坐标的小数部分。如附图图3所示,P(x’,y’)为CORDIC输出的坐标,与其相邻的四个点A,B,C,D的像素值由数据准备单元输出,我们可以通过这四个点的像素值求出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),我们可以通过两级流水线来实现,每级流水线上需要经过一次乘法和一次加法。具体结构如附图图4所示。值得注意的是小数部分dx,dy是用整数表示的。l-dx,l-dy需要对I进行相应的左移以满足位数的对齐。最后得到的像素值需要进行相应位数的右移,最后得到P点的像素值,并将其存入数据存储单元中。
【权利要求】
1.一种基于CORDIC算法的图像旋转VLSI结构,其特征在于:它包括分频单元(I)、CORDIC单元(2),地址产生单元(3),数据准备单元(4),双线性插值单元(5)、数据存储单元(6);分频单元(I)将输入时钟进行六分频,将分频过后的时钟输出给CORDIC单元(2)、地址产生单元(3)以及双线性插值单元(5) ;C0RDIC单元(2)接收坐标以及旋转角度,将旋转过后的坐标输出给数据准备单元(4);地址产生单元(3)依次产生旋转过后的图像的坐标;数据准备单元(4)根据CORDIC单元(2)输入的坐标,找出那个点相邻四个点的像素值并输出给双线性插值单元(5);双线性插值单元(5)根据CORDIC单元(2)输出的坐标以及数据准备单元(4)输出的四个点的像素值求得对应坐标的像素值并存入数据存储单元(6)中。
2.根据权利要求1所描述的基于CORDIC算法的图像旋转VLSI结构,其特征还在于CORDIC单元(2)采用8级移位加法流水线对坐标进行旋转,然后再用5级移位加法流水线对旋转过后的值进行模校正,总共使用13级只包换移位和加法的流水线完成CORDIC算法,可将图像旋转至任意角度,精度为0.4476度。
3.根据权利要求1所描述的基于CORDIC算法的图像旋转VLSI结构,其特征还在于数据准备单元(4)采用有限状态机实现,采用六个状态求取当前坐标最邻近的四个点的像素值并分别输出给双线性插值单元(5)。
4.根据权利要求1所描述的基于CORDIC算法的图像旋转VLSI结构,其特征还在于双线性插值单元(5)采用两 级流水线实现,提高系统的速度。
【文档编号】G06T3/60GK103578078SQ201210264488
【公开日】2014年2月12日 申请日期:2012年7月30日 优先权日:2012年7月30日
【发明者】陈怡 , 张萌, 陈均 申请人:陈怡 , 张萌, 陈均
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1