图像缩放的双线性内插值算法的原理解析
图像的缩放很好理解,就是图像的放大和缩小。传统的绘画工具中,有一种叫做“放大尺”的绘
画工具,画家常用它来放大图画。当然,在计算机上,我们不再需要用放大尺去放大或缩小图
像了,把这个工作交给程序来完成就可以了。下面就来讲讲计算机怎么来放大缩小图象;在本
文中,我们所说的图像都是指点阵图,也就是用一个像素矩阵来描述图像的方法,对于另一种
图像:用函数来描述图像的矢量图,不在本文讨论之列。
越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高
为3个象素,宽也是3个象素的图像,每个象素的取值可以是 0-255,代表该像素的亮度,255
代表最亮,也就是白色,0代表最暗,即黑色 。假如图像的象素矩阵如下图所示(这个原始图
把它叫做源图,Source):
这个矩阵中,元素坐标(x,y)是这样确定的,x从左到右,从0开始,y从上到下,也是从零开始,
这是图象处理中最常用的坐标系,就是这样一个坐标:
---------------------- >X
|
|
|
|
|
∨Y
如果想把这副图放大为 4X4大小的图像,那么该怎么做呢?那么第一步肯定想到的是先把 4X4
的矩阵先画出来再说,好了矩阵画出来了,如下所示,当然,矩阵的每个像素都是未知数,等
待着我们去填充(这个将要被填充的图的叫做目标图,Destination):
然后要往这个空的矩阵里面填值了,要填的值从哪里来来呢?是从源图中来,好,先
填写目标图最左上角的象素,坐标为(0,0),那么该坐标对应源图中的坐标可以由如下公式得
出:
srcX=dstX* (srcWidth/dstWidth) , srcY = dstY * (srcHeight/dstHeight)
好 了 , 套 用 公 式 , 就 可 以 找 到 对 应 的 原 图 的 坐 标 了
(0*(3/4),0*(3/4))=>(0*0.75,0*0.75)=>(0,0)
,找到了源图的对应坐标,就可以把源图中坐标为(0,0)处的234象素值填进去目标图的(0,0)这