图像resize算法在图像处理领域有着十分广泛的应用,是图像处理的基本算法之一。图像resize算法的作用是依据不同的插值方式对图像的大小进行调整。由于算法需要在效率和图像质量之间作权衡。当对图像进行放大时,不可能同时获得更多的细节,因此图像的质量将不可避免地下降。相反,缩小一个图像将会增强它的平滑度和清晰度。除了为了适应显示区域而缩小图片外,图像缩小技术更多的是被用来产生预览图片。图像放大技术一般被用来令一个较小的图像填充一个大的屏幕。
针对用户的需求,产生了不同的折中方案,于是resize算法有多种插值方式。如在OpenCV3.0.0中,cv::resize函数有五种插值算法:最近邻、双线性、双三次、基于像素区域关系、兰索斯插值。由于篇幅限制,本章的resize算法将以最近邻插值和双线性插值两种插值方式的并行化版本进行讨论。
1.最近邻插值
最近邻插值法:也称作零阶插值,就是令变换后像素的灰度值等于距它最近的输入像素的灰度值。最近邻插值法造成的空间偏移误差为像素单位,计算简单。但当图像中的像素灰度级有细微变化时,该方法会在图像中产生人工的痕迹。最近邻插值公式(5-1)如下:
现成的resize算法可参考OpenCV3.0.0库,本章实现的CPU端串行resize算法在源图像为512×512规模,目标图像为1024×1024规模,深度为5,在通道1和通道3的运行时间分别为2.055ms和5.568ms。
2.双线性插值
双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。在图像的双线性插值放大算法中,目标图像中新创造的像素值,是由源图像位置在它附近的2×2区域4个邻近像素的值通过加权平均计算得出的。双线性内插值算法放大后的图像质量较高,不会出现像素值不连续的情况。当对相邻四个像素点采用双线性插值时,所得表面在邻域处是吻合的,但斜率不吻合。且双线性灰度插值的平滑作用可能使得图像的细节产生退化,这种现象在进行图像放大时尤其明显。双线性插值公式(5-2)如下,其中目标图像Dst左边(X,Y)对应于源图像(x,y)。
Dstx,y=(1-u)×Srcx,y+(1-u)×v×Srcx,y+1+u×(1-v)Srcx+1,y+u×v×Srcx+1,y+1 (5-2)(www.daowen.com)
在与最近邻插值相同条件下,其在通道1和通道3的运行时间分别为4.811ms和12.229ms。
现成的resize算法可参考OpenCV3.0.0库,本章实现的CPU端串行resize算法在源图像为512×512规模,目标图像为1024×1024规模,深度为5,在通道1和通道3的运行时间分别为2.055ms和5.568ms。
2.双线性插值
双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。在图像的双线性插值放大算法中,目标图像中新创造的像素值,是由源图像位置在它附近的2×2区域4个邻近像素的值通过加权平均计算得出的。双线性内插值算法放大后的图像质量较高,不会出现像素值不连续的情况。当对相邻四个像素点采用双线性插值时,所得表面在邻域处是吻合的,但斜率不吻合。且双线性灰度插值的平滑作用可能使得图像的细节产生退化,这种现象在进行图像放大时尤其明显。双线性插值公式(5-2)如下,其中目标图像Dst左边(X,Y)对应于源图像(x,y)。
Dstx,y=(1-u)×Srcx,y+(1-u)×v×Srcx,y+1+u×(1-v)Srcx+1,y+u×v×Srcx+1,y+1 (5-2)
在与最近邻插值相同条件下,其在通道1和通道3的运行时间分别为4.811ms和12.229ms。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。