发明内容
有鉴于此,本发明的主要目的在于提供一种对图像进行缩放的方法和装置,以便于能够基于硬件同时提供缩小和放大功能,并能够完成不同倍数的缩放处理。
为了达到上述目的,本发明的技术方案是这样实现的:
一种对图像进行缩放的方法,该方法包括:
A、加载预先生成的缩放系数表,该缩放系数表中包括多种缩小倍数分别对应的离散的系数值以及多种放大倍数分别对应的离散的系数值;
B、接收原始分辨率和满足当前缩放要求的缩放倍数比;
C、根据缩放倍数比查找缩放系数表,确定缩放倍数比对应的步进长度以及系数值;
D、利用确定出的步进长度控制每次参与缩放的原始像素的行或列,将参与缩放的原始像素的行或列中的原始像素的像素值与确定出的系数值进行乘累加,得到缩放处理后的行或列,直至根据原始分辨率确定出当前的图像缩放处理完成,
其中,所述步骤D包括:
A1、当所述原始分辨率为垂直分辨率,所述当前缩放要求为在垂直方向上缩小时,确定缩放系数表中对应所述缩放倍数比的非零系数的个数,将步进长度指针指向第一行原始像素;B1、从步进长度指针指向的行开始取出与所述缩放倍数比相同行数的原始像素中的每一列原始像素,对于取出的每一列原始像素,使用该列中所述非零系数个数的原始像素的像素值与对应所述缩放倍数比的各个非零系数进行乘累加,得到每一列原始像素缩小处理后的像素值,然后根据步进长度更新步进长度指针所指向的原始像素的行,重复执行步骤B1,直至根据原始分辨率确定出完成垂直方向上的缩小处理;
和/或,
A2、当所述原始分辨率为水平分辨率,所述当前缩放要求为在水平方向上缩小时,确定缩放系数表中对应所述缩放倍数比的非零系数,将步进长度指针指向第一列原始像素;B2、从步进长度指针指向的列开始依次取出与所述缩放倍数比相同列数的原始像素中的每一行原始像素,对于取出的每一行原始像素,使用其中各个原始像素与对应所述缩放倍数比的各个非零系数进行乘累加,得到该行原始像素缩小处理后的像素值;根据步进长度更新步进长度指针所指向的原始像素的列,重复执行步骤B2,直至根据原始分辨率确定出完成水平方向上的缩小处理;
和/或,
100、当所述原始分辨率为垂直分辨率,所述当前缩放要求为在垂直方向上放大时,将步进长度指针指向第一行原始像素;101、在步进长度指针指向的行与其下一行之间插入所述缩放倍数比减1行像素,其中,步进长度指针指向的行中的每一个像素和插入的每一行像素的像素值的计算过程为:将当前待计算的像素设置在零相位上,将所述缩放倍数比对应的从零相位开始的各个相位的系数以零相位处的系数为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值;以零相位处的系数为中心,抽取出上下原始像素行中对应位置处的各原始像素所处相位上的非0系数,,将抽取出的各相位上的非0系数分别与抽取出的各相位上原始像素的像素值进行乘累加;将步进长度指针指向下一个原始像素行,重复执行步骤101,直至根据原始分辨率确定出完成垂直方向上的放大处理;
和/或,
200、当所述原始分辨率为水平分辨率,所述当前缩放要求为在水平方向上放大时,将步进长度指针指向第一列原始像素;201、在步进长度指针指向的列与其下一列之间插入所述缩放倍数比减1列像素,其中,步进长度指针指向的列中的每一个像素和插入的每一列像素的像素值的计算过程为:将当前待计算的像素设置在零相位上,将所述缩放倍数比对应的从零相位开始的各个相位的系数以零相位处的系数为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值;以零相位处的系数为中心,抽取出左右原始像素列中对应位置处的各原始像素所处相位上的非0系数,,将抽取出的各相位上的非0系数分别与抽取出的各相位上原始像素的像素值进行乘累加;将步进长度指针指向下一个原始像素列,重复执行步骤201,直至根据原始分辨率确定出完成水平方向上的放大处理。
在步骤C中,所述确定缩放倍数比对应的步进长度的步骤包括:
当前缩放要求为缩小时,确定步进长度等于接收的缩放倍数比;
和/或,
当前缩放要求为放大时,确定步进长度等于所述缩放倍数比的倒数。
在当前缩放为小数倍缩放时,在步骤B接收的缩放倍数比中包括:缩放前的比例值、缩放后的比例值以及第一倍数值,该第一倍数值为缩放前的比例值与缩放后的比例值两者中的较大者除以较小者后得到的小数倍数值中的整数部分;
所述步骤C包括:利用所述第一倍数值以及该第一倍数值加1后得到的第二倍数值分别查找缩放系数表,确定与该两个倍数值分别对应的步进长度以及系数值;
所述步骤D包括:利用第一倍数值对应的步进长度控制参与缩放的原始像素的行或列,将参与缩放的原始像素的行或列中的原始像素的像素值与对应第一倍数值的各个系数值进行乘累加,并间插进行利用第二倍数值对应的步进长度控制参与缩放的原始像素的行或列,将参与缩放的原始像素的行或列中的原始像素的像素值与对应第二倍数值的各个系数值进行乘累加,以得到缩放处理后的行或列,直至根据原始分辨率确定出当前的图像缩放处理完成。
该方法进一步包括:计算对应第二倍数值的b类像素的个数=缩放前的比例值与缩放后的比例值中的较大者-(缩放的整数部分倍数值*缩放前的比例值与缩放后的比例值中的较小者),对应第一倍数值的a类像素的个数=缩放前的比例值-b类像素的个数;
在步骤D中,所述间插的方法包括:根据所述原始分辨率,将一行/列中每缩放前的比例值个像素进行步骤300至301的处理,
300、先根据第一倍数值对应的步进长度以及系数值对当前待处理的像素进行缩放处理,再根据第二倍数值对应的步进长度以及系数值对当前待处理的像素进行缩放处理,返回步骤300,直至执行步骤300的次数等于所述a和b中的较小者;
301、确定所述a和b中的较大者对应的倍数值,利用该倍数值对应的步进长度以及系数值对于剩余的当前待处理的像素进行缩放处理。
一种对图像进行缩放的装置,该装置包括:
缩放参数解析单元,接收并解析原始分辨率和满足当前缩放要求的缩放倍数比,将该原始分辨率输出至步进控制单元,将该缩放倍数比分别输出至滤波系数生成单元和步进控制单元;
滤波系数生成单元,加载预先生成的缩放系数表,该缩放系数表中包括多种缩小倍数分别对应的离散的系数值以及多种放大倍数分别对应的离散的系数值,根据缩放倍数比查找缩放系数表,确定缩放倍数比对应的系数值,并将确定的系数值输出至滤波执行单元;
步进控制单元,根据接收到的缩放倍数比确定步进长度,利用接收的原始分辨率和确定出的步进长度控制每次步进到滤波执行单元中的原始像素的行或列;
滤波执行单元,将步进的行或列中的原始像素的像素值与接收到的系数值进行乘累加,得到并输出缩放处理后的行或列,
其中,当该装置完成水平方向的缩放处理时:
所述步进控制单元,用于根据接收到的步进长度,首先将步进长度指针指向第一列原始像素,后续则根据步进长度更新步进长度指针所指向的原始像素的列;以及从步进长度指针指向的列开始依次取出与所述缩放倍数比相同列数的原始像素中的每一行原始像素,依次输入到所述滤波执行单元中;且,
所述滤波系数生成单元,用于确定缩放系数表中对应所述缩放倍数比的非零系数,将该各个非零系数输出至所述滤波执行单元;且,
所述滤波执行单元,用于将接收到的各个系数值与每次接收到的各个原始像素的像素值进行乘累加,并输出各次乘累加运算后得到的像素列;
和/或,
所述步进控制单元,从第一列原始像素开始,将步进长度指针依次指向下一个原始像素列;以及将步进长度指针指向的每一列中的原始像素分各次输入到所述滤波执行单元中;且,
所述滤波系数生成单元,对于步进长度指针指向的像素列中的每一个像素以及需要插入到步进长度指针指向的像素列与其下一列之间的所述缩放倍数比减1列中的每一个像素,将当前待计算的像素设置在零相位上,将所述缩放倍数比对应的从零相位开始的各个相位的系数以零相位处的系数为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值;以零相位处的系数为中心,抽取出左右两侧各原始像素所处相位上的非0系数,将抽取出的各相位上的非0系数输出至所述滤波执行单元;且,
所述滤波执行单元,用于将接收到的各个系数值与该系数值对应相位上的各个原始像素的像素值进行乘累加,得到当前待计算的像素的像素值,并输出最终形成的每一列像素值,
当该装置完成垂直方向的缩放处理时:
所述步进控制单元,用于根据接收到的步进长度,首先将步进长度指针指向第一行原始像素,后续则根据步进长度更新步进长度指针所指向的原始像素的行;以及从步进长度指针指向的行开始依次取出与所述缩放倍数比相同行数的原始像素中的每一列原始像素,依次输入到所述滤波执行单元中;且,
所述滤波系数生成单元,用于确定缩放系数表中对应所述缩放倍数比的非零系数,将该各个非零系数输出至所述滤波执行单元;且,
所述滤波执行单元,用于将接收到的各个系数值与每次接收到的各个原始像素的像素值进行乘累加,并输出各次乘累加运算后得到的像素行;
和/或,
所述步进控制单元,从第一行原始像素开始,将步进长度指针依次指向下一个原始像素行;以及将步进长度指针指向的每一行中的原始像素分各次输入到所述滤波执行单元中;且,
所述滤波系数生成单元,对于步进长度指针指向的像素行中的每一个像素以及需要插入到步进长度指针指向的像素行与其下一行之间的所述缩放倍数比减1行中的每一个像素,将当前待计算的像素设置在零相位上,将所述缩放倍数比对应的从零相位开始的各个相位的系数以零相位处的系数为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值;以零相位处的系数为中心,抽取出左右两侧各原始像素所处相位上的非0系数,将抽取出的各相位上的非0系数输出至所述滤波执行单元;且,
所述滤波执行单元,用于将接收到的各个系数值与该系数值对应相位上的各个原始像素的像素值进行乘累加,得到当前待计算像素的像素值,并输出最终形成的每一行像素值。
所述步进控制单元在当前缩放要求为缩小时,确定步进长度等于接收的缩放倍数比,在当前缩放要求为放大时,确定步进长度等于所述缩放倍数比的倒数。
所述缩放参数解析单元,在解析出满足当前缩放要求的缩放倍数比中包括缩放前的比例值、缩放后的比例值以及第一倍数值时,该第一倍数值为缩放前的比例值与缩放后的比例值两者中的较大者除以较小者后得到的小数倍数值中的整数部分,将第一倍数值加1得到第二倍数值,并进一步将该第二倍数值输出至所述滤波系数生成单元和所述步进控制单元;
所述滤波系数生成单元,根据第一倍数值和第二倍数值分别查找缩放系数表,确定与该两个倍数值分别对应系数值,并分别输出至所述滤波执行单元;
所述步进控制单元,确定接收到的第一倍数值和第二倍数值分别对应的步进长度,利用第一倍数值对应的步进长度和第二倍数值对应的步进长度间插控制步进到滤波执行单元中的原始像素的行或列;
所述滤波执行单元,将步进的行或列中的原始像素的像素值与对应第一倍数值的各个系数值进行乘累加,并间插进行将步进的行或列中的原始像素的像素值与对应第二倍数值的各个系数值进行乘累加,以得到并输出缩放处理后的行或列。
该图像处理装置为可编程逻辑器件。
由此可见,在本发明中,动态加载缩放系数表,而缩放系数表根据硬件的处理特点设置了多种缩小倍数分别对应的离散的系数值以及多种放大倍数分别对应的离散的系数值,并且,本发明还基于步进长度控制每次参与缩放的原始像素的行或列,这样,后续根据该缩放系数表来进行图像的缩放处理时,则可以保证硬件能够同时提供缩小和放大功能,并能够完成不同倍数的缩放处理,满足了业务的灵活性要求,大大增强了硬件实现图像缩放的实用性。
进一步地,在本发明中,能够将小数倍数的缩放处理转化为多个整数倍数的缩放处理的组合,因此,解决了目前的硬件实现方式中无法进行小数倍缩放的问题。
进一步地,在本发明中,在将小数倍数的缩放处理转化为多个整数倍数的缩放处理的组合时,采取了精确的间插缩放处理,因此能够保证在对图像进行缩放时获得更高的图像精度。
进一步地,在本发明中,缩放系数表能够根据实际业务需求进行实时地动态更新,使得硬件在实现图像缩放时,能够灵活地采用各种图像缩放的滤波算法得到的系数值,从而方便硬件升级。
进一步地,在本发明中,提供了针对缩小和放大处理确定步进长度的方法和步进控制方法,从而能够将缩小和放大处理统一在一个硬件装置上实现。
进一步地,在本发明装置中,执行图像缩放的具体处理的滤波执行单元与加载有缩放系数表的滤波系数生成单元和完成步进控制的步进控制单元相互分离,因此,便于共享缓冲资源。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
在基于硬件实现图像的缩放处理时,为了保证硬件能够同时提供缩小和放大功能,并能够完成不同倍数的缩放处理,本发明提供了一种对图像进行缩放的方法,该方法的核心思想包括:根据硬件的实现方式特点,首先预先生成缩放系数表,该缩放系数表中包括多种缩小倍数分别对应的离散的系数值以及多种放大倍数分别对应的离散的系数值;然后在实现图像缩放处理的硬件上加载该预先生成的缩放系数表,当需要在该硬件上实现图像缩放处理时,由该硬件接收原始分辨率和满足当前缩放要求的缩放倍数比;由该硬件根据缩放倍数比查找缩放系数表,确定缩放倍数比对应的步进长度以及系数值;最后,由该硬件利用确定出的步进长度控制每次参与缩放的原始像素的行或列,将参与缩放的原始像素的行或列中的原始像素的像素值与确定出的系数值进行乘累加,得到缩放处理后的行或列,直至根据原始分辨率确定出当前的图像缩放处理完成。
下面则结合具体的缩放倍数和例子来详细描述本发明在硬件上完成图像缩放处理的具体实现过程。
图1是在本发明实施例中进行图像缩放的处理流程图。参见图1,该流程包括以下步骤:
步骤101:预先生成缩放系数表,该缩放系数表中包括多种缩小倍数分别对应的离散的系数值以及多种放大倍数分别对应的离散的系数值。
在本步骤中,根据硬件实现图像缩放处理的特点,预先生成缩放系数表,以便于在后续处理过程中硬件能够根据该缩放系数表确定各倍数的图像缩小处理采用的系数值、各倍数的图像放大处理采用的系数值,从而实现基于硬件同时提供缩小和放大功能,并能够完成不同倍数的缩放处理。
本步骤中,生成缩放系数表的一种具体实现过程可以包括:选取图像缩小处理对应的函数(记为函数1)以及图像放大处理对应的函数(记为函数2),对函数1分别进行对应各个缩小倍数的抽样处理,得到多种缩小倍数分别对应的离散的系数值,并对函数2分别进行对应各个放大倍数的各相位的抽样处理,得到多种放大倍数分别对应的从零相位开始的离散的系数值。
比如,选取图像缩小处理对应的函数1为梳状滤波器函数,选取图像放大处理对应的函数2为相邻二像素线性插值函数,这样,对于每一种缩小倍数,都采用梳状滤波器函数进行抽样处理,对于每一种放大倍数,都采用相邻二像素线性插值函数进行从零相位开始的抽样处理。此时,最终形成的缩放系数表可以为如下表1所示的形式。
表1
上述表1中给出的系数是理论计算的数值,在实际利用硬件如FPGA实现的时候,由于硬件处理时通常需要采用整数值,因此,在实际实现时可以采用对上述系数进行整数倍放大得到。
上述采用的梳状滤波器函数和相邻二像素线性插值函数只是本实施例列举的一个例子,在实际的业务实现中,也可以采用其他的函数来作为图像缩小或放大处理对应的函数,比如,三角波函数、门限sinc函数等。
需要说明的是,上述生成缩放系数表的实现过程只是本实施例列举的一种较佳的实现方式,在实际的业务实现中,也可以有其他的生成缩放系数表的实现过程,比如,对于不同的缩小倍数,可以不采用上述实现过程中的使用同一个函数1来进行对应各个缩小倍数的抽样处理,而可以根据实际业务需求对于不同的缩小倍数采用不同的函数,比如,在缩小2倍时,使用梳状滤波器函数来进行对应该缩小2倍的抽样处理,得到该缩小2倍的离散的系数值,而在缩小3倍时,使用门限sinc函数来进行对应该缩小3倍的抽样处理,得到该缩小3倍的离散的系数值。同理,对于不同的放大倍数也可以采用不同的函数。
步骤102:预先在硬件中加载所生成的缩放系数表。
在本实施例中,所使用的硬件较佳地可以是可编程逻辑器件,如FPGA等。
另外,为了适应实际业务实现中不断变化的需求,比如,在硬件中原来加载的是上述表1所示的根据梳状滤波器函数和相邻二像素线性插值函数得到的缩放系数表,而根据客户需求的变化,对于图像缩放采用的系数值也就是缩放系数表需要使用其他函数来得到,那么,则可以根据当前的需求重新生成缩放系数表,并实时更新在硬件中加载的缩放系数表。
步骤103:当需要由硬件来实现图像缩放处理时,由该硬件接收并解析图像的原始分辨率和满足当前缩放要求的缩放倍数比。
通常,对图像的缩放处理都涉及水平方向的缩放处理和垂直方向的缩放处理,本实施例提供的图像缩放方法可以只用于处理水平方向的缩放处理,也可以只用于处理垂直方向的缩放处理,当然,较佳地,可以同时用于水平方向和垂直方向的缩放处理。
当需要完成水平方向的缩放处理时,在本步骤中,接收并解析出的图像的原始分辨率包括水平分辨率,满足当前缩放要求的缩放倍数比包括水平方向的缩放倍数比,比如,硬件接收并解析出原始的水平分辨率为640,水平方向的缩放倍数比为2,也就是说,将水平分辨率640的图像在水平方向上放大2倍到1280。同理,当需要完成垂直方向的缩放处理时,在本步骤中,接收并解析出的图像的原始分辨率包括垂直分辨率,满足当前缩放要求的缩放倍数比包括垂直方向的缩放倍数比。
需要说明的是,在现有技术中,当采用硬件方式来进行图像缩放处理时,由于硬件实现的特点,要求对图像进行缩放的倍数必须是整数倍,而无法进行小数倍的图像缩放处理,比如,对于原始的水平分辨率720需要放大到水平分辨率1920,放大倍数约为2.67的小数倍放大处理,现有技术的方法在硬件上无法实现。为了进一步提高在硬件上实现图像缩放处理的业务灵活性,本实施例也可以进一步实现小数倍的图像缩放处理。这样,在本步骤中,如果需要进行的是小数倍的缩放处理,那么,上述的缩放倍数比则不是一个整数值,而是包括三部分数值,即缩放前的比例值、缩放后的比例值、以及缩放前的比例值与缩放后的比例值两者中的较大者除以较小者后得到的小数倍数值中的整数部分。比如,对于上述的原始的水平分辨率720需要放大到水平分辨率1920,放大倍数约为2.67的小数倍放大处理,由于720/1920=9/24,因此,在本步骤中,接收并解析出的缩放倍数比则包括:缩放前的比例值9、缩放后的比例值24、以及24除以9所得到的2.67的整数部分2。
为了能够在硬件上实现该小数倍数的处理,本实施例采用的方法是将该小数倍数的缩放处理转化为多个整数倍数缩放处理的组合,该组合为该小数倍数值中的整数部分倍数和该整数部分倍数加1后的倍数,比如对于上述2.67倍放大处理,可以将其转化为2倍放大处理和3倍放大处理的组合。而为了保证该转化能够尽量满足图像缩放的高精度要求,则需要由硬件基于接收的原始分辨率和缩放倍数比进一步解析出上述组合中多个倍数的分配方式,即,确定出原始像素中有多少个像素(记为a类像素)需要进行上述整数部分倍数的缩放处理,多少个像素(记为b类像素)需要进行上述整数部分加1后的倍数的缩放处理。比如,对于水平分辨率从720放大到1920,由于其缩放倍数比中包括9、24、2,因此,需要确定对于一行的每9个原始像素中有多少个像素需要从1个放大到2个(即有多少个a类像素),多少个像素需要从1个放大到3个(即有多少个b类像素)。
具体地,在本步骤中,计算a类像素(对应上述整数部分倍数)和b类像素(对应上述整数部分加1后得到的倍数)的个数的一种可行的实现方法可以为:b类像素的个数=缩放前的比例值与缩放后的比例值中的较大者-(缩放的整数部分倍数值*缩放前的比例值与缩放后的比例值中的较小者),a类像素的个数=缩放前的比例值-b类像素的个数。仍以上述缩放倍数比包括9、24、2为例,b类像素的个数=24-9×2=6,a类像素的个数=9-6=3,也就是说,在一行的每9个原始像素中有3个原始像素需要进行2倍放大处理,有6个原始像素需要进行3倍放大处理。
步骤104:硬件确定解析出的缩放倍数比对应的步进长度,并根据解析出的缩放倍数比查找缩放系数表,确定该缩放倍数比对应的系数值。
在本步骤中,确定步进长度是为了在后续处理中能够根据步进长度确定每次滤波即低采样的缩小处理或高采样的放大处理所需要使用的原始像素的行/列。具体地,确定步进长度的一种可行的方法为:如果当前缩放要求为缩小时,则确定步进长度等于接收的缩放倍数比;如果当前缩放要求为放大时,则确定步进长度等于缩放倍数比的倒数。
如果在上述步骤103中,解析出的缩放倍数比为一个整数倍数值,那么,在本步骤104中,直接根据该整数倍数值确定步进长度和查找缩放系数表。如果在上述步骤103中,解析出的缩放倍数比中包括小数倍数值中的整数部分倍数,并且,进一步解析出了该整数部分倍数加1后得到的倍数,那么,在本步骤104中,则根据该两个倍数值分别确定步进长度和分别查找缩放系数表。
比如,缩放倍数比为缩小8倍,那么,则可以确定步进长度等于该缩放倍数比8,从表1所示的缩放系数表中查找到对应的系数值为0.25、0.25、0.25、0.25。
再如,缩放倍数比中包括上述的9、24、2,并进一步解析出还需要进行3倍放大处理,那么,则可以确定对应于倍数值2的步进长度为1/2,从表1所示的缩放系数表中查找到该倍数值2对应的系数值为从零相位开始的1和0.5;并且,还可以确定倍数值3的步进长度为1/3,从表1所示的缩放系数表中查找到该倍数值3对应的系数值为从零相位开始的1、0.66和0.33。
步骤105:硬件利用原始分辨率、确定出的系数值和步进长度对图像进行缩放。
本步骤的基本处理过程为:根据具体的缩放要求,利用确定出的步进长度控制每次参与缩放的原始像素的行或列,将参与缩放的原始像素的行或列中的原始像素的像素值与确定出的系数值进行乘累加,得到缩放处理后的行或列,重复执行,直至根据原始分辨率确定出当前的图像缩放处理完成。
下面详细描述本步骤在进行水平/垂直方向上的缩小/放大处理时的较佳的具体实现方案。
方案一、在当前缩放要求为在垂直方向上缩小时,在步骤103中接收到的原始分辨率则为垂直分辨率,本步骤实现图像在垂直方向上进行缩小处理的一种具体实现方案可以包括:
A1、确定缩放系数表中对应所述缩放倍数比的非零系数的个数,将步进长度指针指向第一行原始像素;B1、从步进长度指针指向的行开始取出与所述缩放倍数比相同行数的原始像素中的每一列原始像素,对于取出的每一列原始像素,使用该列中所述非零系数个数的原始像素的像素值与对应所述缩放倍数比的各个非零系数进行乘累加,得到每一列原始像素缩小处理后的像素值,然后根据步进长度更新步进长度指针所指向的原始像素的行,重复执行步骤B1,直至根据原始分辨率确定出完成垂直方向上的缩小处理;
举例来说,比如,当前缩放要求为将图像在垂直方向上缩小8倍,即缩放倍数比为8,那么,根据上述步骤104的处理过程则可以确定步进长度等于该缩放倍数比8,从表1所示的缩放系数表中查找到对应的系数值为0.25、0.25、0.25、0.25。这样,在本步骤105中,参见图2,首先执行上述A1的过程,确定出缩放系数表中对应所述缩放倍数比8的非零系数的个数为4,并且,将步进长度指针指向图像的第1行原始像素(a11...a1m);然后,执行上述步骤B1的过程,从步进长度指针指向的第1行开始取出缩放倍数比行数即8行的原始像素(第1~8行原始像素),取出该8行原始像素后,首先对于该8行原始像素中的第一列,使用该列中4个(非零系数个数)原始像素的像素值如图2中的a11、b11、c11和d11与缩放倍数比8对应的非零系数0.25、0.25、0.25、0.25进行乘累加,即a11×0.25+b11×0.25+c11×0.25+d11×0.25,得到该8行原始像素中的第一列8个像素缩小8倍处理后得到的一个像素的像素值(图2中所示的L11),对于所取出的8行原始像素中的后续每一列,都进行与上述第一列相同的处理,最终将前8行原始像素转变为垂直方向缩小8倍处理后的第1行像素;接着,由于步进长度为8,因此,将步进长度指针步进8,即步进长度指针从第1行原始像素步进8行指向第9行原始像素,再从步进长度指针指向的第9行开始取出缩放倍数比行数即8行的原始像素(第9~16行原始像素),取出该8行原始像素后的所有处理则与上述步进长度指针指向第1行原始像素时取出8行原始像素后的所有处理相同,从而将该第9~16行原始像素转变为垂直方向缩小8倍处理后的第2行像素;重复执行,直到根据原始的垂直分辨率确定出已经对整个图像完成了垂直方向上缩小8倍的处理。
方案二、在当前缩放要求为在水平方向上缩小时,在步骤103中接收到的原始分辨率则为水平分辨率,本步骤实现图像在水平方向上进行缩小处理的一种具体实现方案可以包括:
A2、确定缩放系数表中对应所述缩放倍数比的非零系数,将步进长度指针指向第一列原始像素;B2、从步进长度指针指向的列开始依次取出与所述缩放倍数比相同列数的原始像素中的每一行原始像素,对于取出的每一行原始像素,使用该行中所述非零系数个数的原始像素的像素值与对应所述缩放倍数比的各个非零系数进行乘累加,得到每一行原始像素缩小处理后的像素值;根据步进长度更新步进长度指针所指向的原始像素的列,重复执行步骤B2,直至根据原始分辨率确定出完成水平方向上的缩小处理。
对于该方案二,可以参照上述方案一的例子来理解,只是将上述方案一的例子中的行变为列,将列变为行,其余处理相同。
方案三、在当前缩放要求为在垂直方向上放大时,在步骤103中接收到的原始分辨率则为垂直分辨率,本步骤实现图像在垂直方向上进行放大处理的一种具体实现方案可以包括:
100、将步进长度指针指向第一行原始像素;101、在步进长度指针指向的行与其下一原始像素行之间插入所述缩放倍数比减1行像素,其中,步进长度指针指向的行中的每一个像素和插入的每一行像素的像素值的计算过程为:将当前待计算的像素设置在零相位上,将所述缩放倍数比对应的从零相位开始的各个相位的系数以零相位处的系数为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值;以零相位处的系数为中心,抽取出上下原始像素行中对应位置处的各原始像素所处相位上的非0系数,将抽取出的各相位上的非0系数分别与抽取出的各相位上原始像素的像素值进行乘累加;将步进长度指针指向下一个原始像素行,重复执行步骤101,直至根据原始分辨率确定出完成垂直方向上的放大处理。
举例来说,比如,当前缩放要求为将图像在垂直方向上放大4倍,即缩放倍数比为4,那么,根据上述步骤104的处理过程则可以确定步进长度等于该缩放倍数比的倒数1/4,从表1所示的缩放系数表中查找到对应的系数值为从零相位开始的1、0.75、0.5、0.25。这样,在本步骤105中,首先执行上述100的过程,将步进长度指针指向图像的第1行原始像素(a11、a12、a13...a1m);然后,执行上述步骤101的过程,在步进长度指针指向的第1行与其下一个原始像素行即第2行之间插入3行(即缩放倍数比4减1行)像素,也就是说,原来第1行至第2行的1行原始像素空间变为了4行原始像素空间,也就是说,放大了4倍,在每插入一行时根据步进长度1/4对步进长度指针进行步进,直到插完该3行后,步进长度指针则指向了第2行原始像素,接着,在步进长度指针指向的第2行与其下一个原始像素行即第3行之间插入3行(即缩放倍数比4减1行)像素,在每插入一行时根据步进长度1/4对步进长度指针进行步进,直到插完该3行后,步进长度指针则指向了第3行原始像素,以此类推,直至根据原始分辨率确定出完成垂直方向上的放大处理。
其中,在任意2个原始像素行之间插入3行像素的处理是类似的,因此,这里仅以在原始像素的第4行与第5行之间插入3行像素的处理为例,从当前步进长度指针指向的该原始像素的第4行中每一个像素开始,计算其像素值再到插入的第1行中每一个像素的像素值,以此类推,直至插入的第3行中每一个像素的像素值,每一个像素值的计算过程为:参见图3和图4,以计算指向的第4行中的第1个像素为例,将该行原始像素d11设置在零相位上,将当前缩放倍数比4对应的从零相位开始的各个相位的系数以零相位处的系数1为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值,从而最终得到涉及的系数值包括0.25、0.5、0.75、1、0.75、0.5、0.25,以零相位处的系数1为中心,抽取出上下原始像素行中对应位置处的各原始像素所处相位上的非0系数(参见图4,此时除了零相位处的系数1外没有非0系数),因此,乘累加的结果为d11×1=d11,故该位置上的像素值为d11;再以计算插入的第一行中的第1个像素的像素值L11为例,将该像素L11设置在零相位上,将当前缩放倍数比4对应的从零相位开始的各个相位的系数以零相位处的系数1为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值,从而最终得到涉及的系数值包括0.25、0.5、0.75、1、0.75、0.5、0.25,以零相位处的系数1为中心,抽取出上下原始像素行中对应位置处的各原始像素所处相位上的非0系数,参见图5,此时抽取出的是原始像素d11对应的系数值0.75和e11对应的系数值0.25,因此,乘累加的结果为插入的像素值L11=d11×0.75+e11×0.25。
方案四、在当前缩放要求为在水平方向上放大时,在步骤103中接收到的原始分辨率则为水平分辨率,本步骤实现图像在水平方向上进行放大处理的一种具体实现方案可以包括:
200、将步进长度指针指向第一列原始像素;201、在步进长度指针指向的列与其下一列之间插入所述缩放倍数比减1列像素,其中,步进长度指针指向的列中的每一个像素和插入的每一列像素的像素值的计算过程为:将当前待计算的像素设置在零相位上,将所述缩放倍数比对应的从零相位开始的各个相位的系数以零相位处的系数为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值;以零相位处的系数为中心,抽取出左右原始像素列中对应位置处的各原始像素所处相位上的非0系数,,将抽取出的各相位上的非0系数分别与抽取出的各相位上原始像素的像素值进行乘累加;将步进长度指针指向下一个原始像素列,重复执行步骤201,直至根据原始分辨率确定出完成水平方向上的放大处理。
对于该方案四,可以参照上述方案三的例子来理解,只是将上述方案三的例子中的列变为行,将行变为列,其余处理相同。
需要说明的是,由于本实施例提供的图像缩放方法可以只用于处理水平方向的缩放处理,也可以只用于处理垂直方向的缩放处理,当然,较佳地,还可以同时用于水平方向和垂直方向的缩放处理,因此,本发明实施例提供的图像缩放的处理实际上可以包括上述的方案一至方案四中的任意一种方案,或者是任意几种方案的组合。
还需要说明的是,上述4个方案均以缩放倍数比为一个整数为例说明步骤105在各种缩放要求下的完整实现流程。如果当前缩放要求为在垂直/水平方向上进行小数倍数的缩小/放大处理时,根据在步骤104中的描述可以知道,本实施例是将该小数倍数的缩放处理转化为该小数倍数值中整数部分倍数与该整数部分倍数加1后得到的倍数的组合的间插缩放处理,因此,在上述4个方案中,是利用该整数部分倍数对应的步进长度控制参与缩放的原始像素的行或列,将参与缩放的原始像素的行或列中的原始像素的像素值与对应该整数部分倍数的各个系数值进行乘累加,并间插进行利用该整数部分倍数加1后得到倍数对应的步进长度控制参与缩放的原始像素的行或列,将参与缩放的原始像素的行或列中的原始像素的像素值与对应该整数部分倍数加1后得到倍数的各个系数值进行乘累加,以得到缩放处理后的行或列,直至根据原始分辨率确定出当前的图像缩放处理完成。
具体地,两种倍数间插缩放处理的一种可行的实现过程包括:根据原始分辨率,将一行/列中每缩放前的比例值个像素进行如下步骤300至301的处理,
300、先根据小数倍数值中整数部分倍数对应的步进长度以及系数值对当前待处理的像素进行缩放处理,再根据该整数部分倍数加1后得到倍数所对应的步进长度以及系数值对当前待处理的像素进行缩放处理,返回步骤300,直至执行步骤300的次数等于在步骤104中计算出的a和b中的较小者;
301、确定在步骤104中计算出的a和b中的较大者对应的倍数值,利用该倍数值对应的步进长度以及系数值对于剩余的当前待处理的像素进行缩放处理。
为了更加清楚地体现上述间插缩放处理的过程,以步骤104中举例的原始水平分辨率720需要放大到水平分辨率1920,放大倍数约为2.67的小数倍放大处理为例,在步骤104中,已经确定出需要将该2.67倍的放大处理转换为2倍放大处理和3倍放大处理的组合,并且,在一行的每9个原始像素中进行2倍放大处理的a类像素的个数为3,进行3倍放大处理的b类像素的个数为6,因此,在本步骤105中,是将图像的每一行原始像素间插进行2倍放大和3倍放大,具体地,结合上述方案四,首先将步进长度指针指向第一列原始像素;对于第1列(每一行的第1个)原始像素进行放大2倍的处理,具体处理的方法采用方案四中描述的在相邻两列之间插入1列像素的实现过程,然后执行一次间插,即,对于第2列(每一行的第2个)原始像素进行放大3倍的处理,具体处理的方法采用方案四中描述的在相邻两列之间插入2列像素的实现过程,对于后续的每2列原始像素按照上述第1列放大2倍且第2列放大3倍的间插处理原理进行间插放大,直至执行间插的次数等于a和b中的较小者a(3次),此时,已执行到该前9列原始像素中的第6列,对于剩余的3列则进行放大a和b中的较大者即放大3倍的处理,即在第7、8、9列的每2列原始像素间插入2列像素,具体处理的方法采用方案四中描述的在相邻两列之间插入2列像素的实现过程,至此,前9列原始像素则完成了间插2倍放大和3倍放大的处理,对于下一个9列原始像素,按照上述前9列原始像素的处理方式执行间插2倍放大和3倍放大的处理,直至根据原始分辨率720确定出完成了整个图像的缩放处理。
另外,本发明实施例还提出了一种对图像进行缩放的装置。参见图6,该装置包括:
缩放参数解析单元,接收并解析原始分辨率和满足当前缩放要求的缩放倍数比,将该原始分辨率输出至步进控制单元,将该缩放倍数比分别输出至滤波系数生成单元和步进控制单元;
滤波系数生成单元,加载预先生成的缩放系数表,该缩放系数表中包括多种缩小倍数分别对应的离散的系数值以及多种放大倍数分别对应的离散的系数值,根据缩放倍数比查找缩放系数表,确定缩放倍数比对应的系数值,并将确定的系数值输出至滤波执行单元;
步进控制单元,根据接收到的缩放倍数比确定步进长度,利用接收的原始分辨率和确定出的步进长度控制每次步进到滤波执行单元中的原始像素的行或列;
滤波执行单元,将步进的行或列中的原始像素的像素值与接收到的系数值进行乘累加,得到并输出缩放处理后的行或列。。
在本发明实施例提出的装置中,步进控制单元确定步进长度的一种可行的操作为:在当前缩放要求为缩小时,确定步进长度等于接收的缩放倍数比,在当前缩放要求为放大时,确定步进长度等于所述缩放倍数比的倒数。
本实施例提供的图像缩放装置可以是只用于处理水平方向缩放处理的装置,也可以是只用于处理垂直方向缩放处理的装置,当然,较佳地,该装置可以同时用于完成水平方向和垂直方向的缩放处理。
当本实施例提供的图像缩放装置完成水平方向的缩小处理时,
所述步进控制单元,用于根据接收到的步进长度,首先将步进长度指针指向第一列原始像素,后续则根据步进长度更新步进长度指针所指向的原始像素的列;以及从步进长度指针指向的列开始依次取出与所述缩放倍数比相同列数的原始像素中的每一行原始像素,依次输入到所述滤波执行单元中;且,
所述滤波系数生成单元,用于确定缩放系数表中对应所述缩放倍数比的非零系数,将该各个非零系数输出至所述滤波执行单元;且,
所述滤波执行单元,用于将接收到的各个系数值与每次接收到的各个原始像素的像素值进行乘累加,并输出各次乘累加运算后得到的像素列。
当本实施例提供的图像缩放装置完成水平方向的放大处理时,
所述步进控制单元,从第一列原始像素开始,将步进长度指针依次指向下一个原始像素列;以及将步进长度指针指向的每一列中的原始像素分各次输入到所述滤波执行单元中;且,
所述滤波系数生成单元,对于步进长度指针指向的像素列中的每一个像素以及需要插入到步进长度指针指向的像素列与其下一列之间的所述缩放倍数比减1列中的每一个像素,将当前待计算的像素设置在零相位上,将所述缩放倍数比对应的从零相位开始的各个相位的系数以零相位处的系数为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值;以零相位处的系数为中心,抽取出左右原始像素列中对应位置处的各原始像素所处相位上的非0系数,将抽取出的各相位上的非0系数输出至所述滤波执行单元;且,
所述滤波执行单元,用于将接收到的各个系数值与该系数值对应相位上的各个原始像素的像素值进行乘累加,得到当前待计算的像素的像素值,并输出最终形成的每一列像素值。
当本实施例提供的图像缩放装置完成垂直方向的缩小处理时;
所述步进控制单元,用于根据接收到的步进长度,首先将步进长度指针指向第一行原始像素,后续则根据步进长度更新步进长度指针所指向的原始像素的行;以及从步进长度指针指向的行开始依次取出与所述缩放倍数比相同行数的原始像素中的每一列原始像素,依次输入到所述滤波执行单元中;且,
所述滤波系数生成单元,用于确定缩放系数表中对应所述缩放倍数比的非零系数,将该各个非零系数输出至所述滤波执行单元;且,
所述滤波执行单元,用于将接收到的各个系数值与每次接收到的各个原始像素的像素值进行乘累加,并输出各次乘累加运算后得到的像素行。
当本实施例提供的图像缩放装置完成垂直方向的放大处理时,
所述步进控制单元,从第一行原始像素开始,将步进长度指针依次指向下一个原始像素行;以及将步进长度指针指向的每一行中的原始像素分各次输入到所述滤波执行单元中;且,
所述滤波系数生成单元,对于步进长度指针指向的像素行中的每一个像素以及需要插入到步进长度指针指向的像素行与其下一行之间的所述缩放倍数比减1行中的每一个像素,将当前待计算的像素设置在零相位上,将所述缩放倍数比对应的从零相位开始的各个相位的系数以零相位处的系数为中心展开,并以左右对称的方式补充得到零相位左侧的各个相位的系数值;以零相位处的系数为中心,抽取出上下原始像素行中对应位置处的各原始像素所处相位上的非0系数,将抽取出的各相位上的非0系数输出至所述滤波执行单元;且,
所述滤波执行单元,用于将接收到的各个系数值与该系数值对应相位上的各个原始像素的像素值进行乘累加,得到当前待计算像素的像素值,并输出最终形成的每一行像素值。
较佳地,利用本实施例提供的图像缩放处理装置能够处理小数倍的图像缩放,具体地思想是将小数倍的缩放处理转换为多个整数倍的缩放处理的组合,一种可行的实现方式包括:
所述缩放参数解析单元,在解析出满足当前缩放要求的缩放倍数比中包括缩放前的比例值、缩放后的比例值以及第一倍数值时,该第一倍数值为缩放前的比例值与缩放后的比例值两者中的较大者除以较小者后得到的小数倍数值中的整数部分,将第一倍数值加1得到第二倍数值,并进一步将该第二倍数值输出至所述滤波系数生成单元和所述步进控制单元;
所述滤波系数生成单元,根据第一倍数值和第二倍数值分别查找缩放系数表,确定与该两个倍数值分别对应系数值,并分别输出至所述滤波执行单元;
所述步进控制单元,确定接收到的第一倍数值和第二倍数值分别对应的步进长度,利用第一倍数值对应的步进长度和第二倍数值对应的步进长度间插控制步进到滤波执行单元中的原始像素的行或列;
所述滤波执行单元,将步进的行或列中的原始像素的像素值与对应第一倍数值的各个系数值进行乘累加,并间插进行将步进的行或列中的原始像素的像素值与对应第二倍数值的各个系数值进行乘累加,以得到并输出缩放处理后的行或列。
在本发明实施例中,进行图像缩放处理的装置可以为可编程逻辑器件,比如FPGA。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。