具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,对图像的所有行逐行进行水平插值处理后,在对完成行的像素插值的图像的列逐列进行垂直插值,并实现了像素插值和旋转同时进行,加快了图像像素插值的速度,降低了像素插值应用的成本。
图1示出了本发明实施例提供的图像像素插值方法的实现流程。
在步骤S101中,根据图像获取图像中待插值的行。
数字图像处理中,图像用矩阵表示,矩阵的数据信息表现了图像的信息,在本发明实施例中,图像的行像素和列像素对应矩阵的行和列,图像的行像素值和列像素值对应矩阵的行值和列值。未经过像素插值的图像的像素为整像素。
在本发明实施例中,获取图像中待插值的行时,根据获取图像中待插值的行的方式,本发明实施例支持图像旋转0度或者90度或者180度或者270度,在需要完成图像0度或者90度或者180度或者270度旋转并完成像素插值时,此时获取图像旋转0度或者90度或者180度或者270度的行的过程即为根据图像获取图像中待插值的行的过程,设图像旋转0度或者90度或者180度或者270度的行对应的行为0度行或者90度行或者180度行或者270度行,设图像的大小为m*n,且0≤a≤m,0≤b≤n,则获取图像中待插值的行的具体内容包括:当图像中待插值的行为0度行时,图像中待插值的行有m行,每行n个像素,将图像的第a行b列像素作为图像中待插值的第a行b列像素;当图像中待插值的行为90度行时,图像中待插值的行有n行,每行m个像素,将图像的第b行a列像素作为图像中待插值的第a行b列像素;当图像中待插值的行为180度行时,图像中待插值的行有m行,每行n个像素,将图像的第a行(n-b)列像素作为所述图像中待插值的第a行b列像素;当图像中待插值的行为270度行时,图像中待插值的行有n行,每行m个像素,将图像的第b行(m-a)列像素作为所述图像中待插值的第a行b列像素。通过上述获取图像中待插值的行的方法不经过旋转运算完成了图像0度或者90度或者180度或者270度的旋转,且完成旋转的过程也是逐行进行的,由于本发明所用像素插值方法是先对行进行逐行像素插值再对列进行逐列像素插值的方式进行,在本发明实施例中,在实现图像插值过程的同时还可以实现图像的旋转,具体过程为:运用上述获取图像中待插值的行的方法获取当前行,此时当前行已完成旋转再对当前行进行像素插值的,完成了当前行的像素插值后再用上述获取图像中待插值的行的方法获取另一未旋转的行完成旋转,并对该完成旋转的行的进行像素插值,如此重复,直至所有行均完成旋转和像素插值,最后对完成行的像素插值的图像的列逐列进行像素插值,其中,像素插值的过程见后文详述,和一般的支持图像旋转和插值的方法即先对图像进行旋转运算,再对旋转后的图像进行像素插值的方法相比,本发明实施例实现了图像的旋转和插值的同步进行,减少了步骤,具有计算量小,速度快的优点。
在步骤S102中,对图像中待插值的行进行水平1/2像素插值。
在本发明实施例中,1/2像素包括水平1/2像素和垂直1/2像素,1/4像素包括水平1/4像素、垂直1/4像素和对角1/4像素。
水平1/2像素处于未经过像素插值的图像中待插值的各行相邻的两个整像素中间,水平1/2像素值根据未经过像素插值的图像的各行整像素值获得,获取水平1/2像素值的具体步骤为:水平1/2像素值由公式
计算得到,其中A
-j和A
j为所述水平1/2像素所在行分别与其相邻且左右对称的j个整像素值,C[j]为权系数,j越小,所述A
-j和A
j对应的整像素距离所述垂直1/2像素越近,k不大于水平1/2像素所在行与其相邻的整像素的个数的一半,公式中的rounding_control为四舍五入的参数。
在步骤S103中,对完成水平1/2像素插值的行进行水平1/4像素插值。
在本发明实施例中,对图像中待插值的行先进行水平1/2像素插值,再对完成水平1/2像素插值的图像的行进行水平1/4像素插值,水平1/4像素处于完成水平1/2像素插值的行中相邻的两个水平1/2像素中间。水平1/4像素值由水平1/2像素插值后根据图像的水平1/2像素插值和整像素值获得,获取水平1/2像素值的具体步骤为:水平1/4像素值由公式(A+a+1-rounding_control)/2计算得到,其中A表示所述水平1/4像素所在行与其相邻的整像素值,a表示水平1/4像素所在行与其相邻的水平1/2像素值。公式中的rounding_control为四舍五入的参数,分别控制所述计算得到的水平1/2像素值和水平1/4像素值为整数。
在步骤S104中,对完成水平1/4像素插值的列进行垂直1/2像素插值和垂直1/4像素插值。
根据获取完成水平1/4像素插值的图像的列,对完成水平1/4像素插值的图像的列进行垂直1/2像素插值和垂直1/4像素插值,垂直1/2像素处于完成水平插值的图像的列中相邻的两个整像素中间,或者处于完成水平插值后的图像的列中相邻的两个水平1/2像素中间;垂直1/4像素插值处于完成水平插值的图像的列中相邻的两个水平1/4像素中间。垂直1/2像素值和垂直1/4像素值根据完成水平插值的图像的列中的水平1/2像素值和水平1/4像素值获得,获取垂直1/2像素值和垂直1/4像素值的具体步骤包括:
当垂直1/2像素与两个整像素相邻时,垂直1/2像素值由公式
计算得到,其中B
-j和B
j为垂直1/2像素所在列分别与其相邻且上下对称的j个整像素值;当垂直1/2像素与两个水平1/2像素相邻时,垂直1/2像素值由公式
计算得到,其中b
-j和b
j为所述垂直1/2像素所在列分别与其相邻且上下对称的j个水平1/2像素值,其中C[j]为权系数,j越小,B
-j和B
j对应的整像素,或b
-j和b
j对应的1/2像素距离垂直1/2像素越近,k不大于垂直1/2像素所在行与其相邻的整像素或者水平1/2像素的个数的一半。
垂直1/4像素由公式计算得到,其中bb-j和bbj为垂直1/2像素所在列与其相邻且上下对称的j个水平1/4像素值,其中C[j]为权系数,j越小,bb-j和bbj对应的垂直1/2像素距离垂直1/4像素越近,k不大于垂直1/4像素所在行与其相邻的垂直1/2像素的个数的一半。
公式中的rounding control为四舍五入的参数,分别控制计算得到的垂直1/2像素值和垂直1/4像素值为整数。
在步骤S105中,对完成垂直1/2像素插值的列和完成垂直1/4像素插值的列进行对角1/4像素插值。
在本发明实施例中,完成垂直1/2像素插值和垂直1/4像素插值后,对完成垂直1/2像素插值的列或者完成垂直1/4像素插值的列进行对角1/4像素插值。其中,对角1/4像素处于完成垂直1/4像素插值的列中相邻的两个垂直1/4像素中间,或者处于完成垂直1/2像素插值的列中相邻的一个整像素和一个垂直1/2像素中间。对角1/4像素值由完成垂直1/4像素插值的列中的水平1/2像素值、水平1/4像素值和垂直1/2像素值获得,获取对角1/4像素值的具体步骤包括:当对角1/4像素与两个垂直1/4像素相邻时,对角1/4像素值由(bb1+bb2+1-rounding_control)/2计算得到,其中为bb1和bb2分别为对角1/4像素所在列与其相邻的两个垂直1/4像素值,当对角1/4像素与一个整像素和一个垂直1/2像素相邻时,对角1/4像素值由(bb+b+1-rounding_control)/2计算得到,其中bb为对角1/4像素所在列与其相邻的整像素值,b为对角1/4像素所在列与其相邻的垂直1/2像素的像素值。公式中的rounding control为四舍五入的参数,控制计算得到的对角1/4像素值为整数。
本发明实施例中,权系数C[j]由方法所用的插值滤波器确定。比如当公式中的k=4时,C[1]=160,C[2]=-48,C[3]=24,C[4]=-8,还可以是其他数值,在此不再详细列举。现有技术插值像素值的计算过程是计算先求整个图像中的1/2像素值,再根据1/2像素值求整个图像中的1/4像素值,在每一次计算1/2像素值或1/4像素值时,需要从记录整个图像的整像素值或1/2像素值的信息中调用计算插值像素值所需的像素值,可以看出,在本发明实施例中,图像的像素插值计算过程是根据记录的行或列的像素值信息计算该行或该列的插值像素值,且在计算一行或一列的插值像素值同时还可以记录另一行或一列的像素值信息,这样,大大加快了像素插值的速度。
图2示出了本发明实施例提供的图像像素插值和旋转同时进行的处理流程。
本发明实施例中,图像的像素插值支持图像0度、90度、180度和270度旋转,当图像旋转0度时图像的行保持不变,当图像旋转90度或者180度或者270度时,需要先根据上述方法对图像的行像素进行读取完成旋转,同时进行像素插值的具体步骤如下:
在步骤S201中,获取图像;
在步骤S202中,根据图像获取图像中待插值的第一行,该行可以是0度行或者90度行或者180度行或者270度行;
在步骤S203中,进行行内的水平1/2像素插值;
在步骤S204中,对完成行内的水平1/2像素插值的行水平1/4像素插值;
在步骤S205中,判断图像的所有行是否完成水平1/4像素插值,是则执行步骤S207,否则执行步骤S208;
在步骤S206中,获取完成水平1/2像素插值的待插值的行的下一行;
在步骤S207中,获取完成所有行的水平1/4像素插值的图像的第一列;
在步骤S208中,进行列内垂直1/2像素插值或者1/4像素插值;
在步骤S209中,对完成列内垂直1/2像素插值或者1/4像素插值的列对角1/4像素插值;
在步骤S210中,判断图像的所有列是否完成对角1/4像素插值,是则图像像素插值结束,否则执行步骤S211;
在步骤S211中,获取完成列内垂直1/2像素插值或者1/4像素插值的列的下一列。
本发明实施例中,逐行先旋转后水平插值操作,直到图像的所有行完成旋转和水平插值后,再对完成旋转和水平插值的图像的列进行逐列垂直插值操作,实现了图像旋转时像素插值的完成。
图3(a)示出了本发明实施例提供的图像的部分整像素排列,是未进行像素插值的图像中部分整像素排列图,图中“+”代表整像素。
图3(b)示出了本发明实施例提供的图3(a)中两两相邻的四个整像素的像素插值示意图。
本发明实施例中,本发明实施例中,完成图像插值的所需的行或列中整像素的组成单位是八行八列,也可以是六行六列,还可以有其他形式,两两相邻的四个整像素之间的像素插值过程是图像像素插值的缩影。图中“+”代表整像素,“o”代表1/2像素,“×”代表1/4像素,本发明实施例中,1/2像素包括水平1/2像素和垂直1/2像素,1/4像素包括水平1/4像素、垂直1/4像素和对角1/4像素,b-1,b1表示水平1/2像素,cc-1,cc1,dd1,dd-1表示水平1/4像素,e,k表示垂直1/2像素,hh,nn表示垂直1/4像素,ff,gg,ii,jj,ll,mm,oo,pp表示对角1/4像素。
本发明实施例中两两相邻的四个整像素的像素插值中的插值像素值的获取过程如下:
根据整像素A-1,-1和A1,-1所在行的整像素值,先计算水平1/4像素b-1的值:
再根据b-1的值和整像素A-1,-1和A1,-1的值,计算水平1/4像素cc-1和dd-1的值:
cc-1=(A-1,-1+b-1-rounding_contro1)/2;
dd-1=(A1,-1+b-1-rounding_contro1)/2。
整像素A-1,-1和A1,-1所在行水平插值完成水平插值后,计算下一行即整像素A-1,1和A1,1所在行的水平像素插值数值,同理计算得到:
cc1=(A-1,1+b1-rounding_control)/2,
dd1=(A1,1+b1-rounding_control)/2
可以看出,在完成图像的水平1/2像素插值和1/4像素插值完成后,图像的列由整像素和1/2像素,或者1/2像素或者1/4像素组成,根据上述计算步骤已经获得水平1/4像素b-4、b-3、b-2 b2、b3、b4的值,水平1/4像素cc-4、cc-3、cc-2、cc2、cc3、cc4的值,以及dd-4、dd-3、dd-2、dd2、dd3、dd4的值。
当前列为整像素A-1,-1和A-1,1所在列时,先计算垂直1/2像素e的值:
再根据垂直1/2像素e和整像素A-1,-1或A-1,1的值,计算对角1/4像素ff,gg的值:
ff=(A-1,-1+e-rounding_control)/2;
gg=(A-1,1+e-rounding_control)/2;
当前列为1/4像素cc-1,cc1所在列时,先计算垂直1/4像素hh的值:
再根据垂直1/4像素cc-1,cc1的值和水平1/4像素hh的值,计算对角1/4像素ii,jj的值:
ii=(cc-1+hh-rounding_control)/2
jj=(cc1+hh-rounding_control)/2
同理当前列为1/4像素dd-1,dd1所在列时,计算得到:
oo=(dd-1+nn-rounding_control)/2
pp=(dd1+nn-rounding_control)/2
当前列为1/2像素b-1,b1所在列时,先垂直计算1/2像素k的值,
再根据1/2像素k和b-1或b1的值,计算对角1/4像素的ll,jj值:
ll=(b-1+k-rounding_control)/2
jj=(b1+k-rounding_control)/2
在本发明实施例中,权系数C[j]的值为C[1]=160,C[2]=-48,C[3]=24,C[4]=-8。rounding_control为四舍五入的参数,分别控制所述计算得到的像素值为整数。
为了减少调用插值像素值计算公式占用的资源,提高运算速度,还可以对上述插值像素值计算公式的个数进行简化,在本发明实施例中,由于1/2像素值由整像素值计算求得,而1/4像素值是根据1/2像素值和整像素值计算求得,所以插值像素值均由整像素值计算求得,1/4像素值和1/2像素值计算公式可以化简,使公式部分只包括整像素参数及其对应的系数,插值像素的类型决定系数,而插值像素的类型根据插值像素的位置判断,计算插值像素值时,根据插值像素的位置可以确定所需的整像素值及对应的系数,逐行或逐列完成插值像素值的计算,化简后的公式数目大大减少,详细过程不再详述。
图4出了本发明的一个实施例提供的图像像素插值系统的结构。为了便于说明,仅示出了与本发明实施例相关的部分。该像素插值系统可以是软件单元、硬件单元或者软硬件结合的单元。
图像获取单元41获取用于像素插值的图像,像素插值计算单元42根据图像获取单元获取的用于像素插值的图像计算像素插值,缓存单元43缓存像素插值计算单元42的计算结果,并将缓存的像素插值计算结果发送给像素插值计算单元42。
在本发明实施例中,像素插值计算单元42根据图像获取单元获取的用于像素插值的图像,对图像中待插值的行进行水平1/2像素插值,对完成水平1/2像素插值的行进行水平1/4像素插值,对完成水平1/4像素插值的列进行垂直1/2像素插值和垂直1/4像素插值,对完成垂直1/2像素插值的列和完成垂直1/4像素插值的列进行对角1/4像素插值计算像素插值。像素插值计算单元42还可以进一步包括用于计算1/2像素插值的1/2像素插值计算单元、用于计算1/4像素插值的1/4像素插值计算单元和判断像素的类型的判断单元,像素的类型包括1/2像素和1/4像素,其中,1/2像素包括水平1/2像素和垂直1/2像素;1/4像素包括水平1/4像素、垂直1/4像素和对角1/4像素。具体像素插值过程如上所述,在此不再赘述。
在本发明另一实施例中,该像素插值系统还可以包括缓冲器(图未示出),比如12*8的缓冲器暂存像素插值过程中行或列的像素值,其中,行包括获取图像中待插值的行,或者完成水平1/2像素插值的行,或者完成水平1/4像素插值的行,列包括完成水平1/4像素插值的列,或者垂直1/2像素插值的列,或者完成对角1/4像素插值的列,由于本发明实施例中系统计算插值像素值所用缓冲器用来暂存行或列的像素值信息,同现有技术计算插值像素值所用缓冲器用来暂存整个图像的像素值信息相比,所需面积大大减小,系统像素插值运算速度较快,硬件成本较低。
在本发明实施例中,通过逐行或逐列进行1/2像素插值和1/4像素插值,有效提高了像素插值的速度,降低了实现像素插值的系统的硬件成本,并实现了图像像素插值的同时支持图像的0度或者90度或者180度或者270度旋转。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。