双线性插值MATLAB的问题,双线性插值、


什么是线性插值原理 什么是双线性插值?

线性插值一次为:0,5,10,15,20,25,30,35,40
即认为其变化(增减)是线形的,可以在坐标图上画出一条直线
在数码相机技术中,这些数值可以代表组成一张照片的不同像素点的色彩、色度等指标。
为了方便理解,先考虑一维情况下的线性插值
对于一个数列c,我们假设c[a]到c[a+1]之间是线性变化的
那么对于浮点数x(a<=x<a+1),c(x)=c[a+1]*(x-a)+c[a]*(1+a-x);
把这种插值方式扩展到二维情况
对于一个二维数组c,我们假设对于任意一个浮点数i,c(a,i)到c(a+1,i)之间是线性变化的,c(i,b)到c(i,b+1)之间也是线性变化的(a,b都是整数)
那么对于浮点数的坐标(x,y)满足(a<=x<a+1,b<=y<b+1),我们可以先分别求出c(x,b)和c(x,b+1):
c(x,b) = c[a+1]*(x-a)+c[a]*(1+a-x);
c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x);
好,现在已经知道c(x,b)和c(x,b+1)了,而根据假设c(x,b)到c(x,b+1)也是线性变化的,所以:
c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y)
这就是双线性插值,

双线性插值为什么可以消除锯齿现象

双线性插值作为一种滤波器,广泛应用在信号处理,数字图像和视频处理等应用中。
双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。

线性插值的结果与插值的顺序无关。首先进行y方向的插值,然后进行x方向的插值,所得到的结果是一样的。双线性插值的结果与先进行哪个方向的差值无关。
如果选择一个坐标系统使得 的四个已知点坐标分别为 (
0, 0)、(
0, 1)、(
1, 0) 和 (
1, 1),那么插值公式就可以化简为
f(x,y)=f(0,0)(1-x)(1-y)+f(0,1)(1-x)y+f(1,1)xy+f(1,0)x(1-y)
在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q1~Q4所构成的正方形以外的点的值。
双线性插值的一个显然的三维空间延伸是三线性插值。
锯齿现象(Jaggies)
锯齿是指数码图像中从斜线和物体边缘可以看到的一“级”一“级”不平滑的线条。我们也称其为“混淆现象”,线条呈一级一级的现象(锯齿现象)是由象素为正方形的本质决定的。

增加解像度可以减少可见的锯齿
  随着传感器或照片的解像度提高,可见锯齿会变得越来越不明显。以下是一幅放大的鲜花与蓝天交接的场景,它是不同数码相机在不同解像度的情况下拍摄。低解像度的数码相机使锯齿清晰可见。当我们从A到D增加照片解像度时,锯齿越来越不明显,在图D中,锯齿几乎难以察觉。但是当图D被放大时,锯齿仍然后出现
防锯齿功能减少可见锯齿,数码相机其实拥有与生俱来的防锯齿功能,因为描述物体边缘的象素会从边缘两边的物体收集信息。在以上的例子中,描述花朵黄色边缘的象素同时会收集一部分蓝色天空的信息,使象素的值介于黄色和蓝色之间。防锯齿功能使图像中物体的边缘比没有防锯齿的理论(图F)边缘较“软”,即较平滑。

如果传感器有颜色过滤排列装置,图像处理器会利用周围象素的信息对边缘象素进行计算插补,消除锯齿。这也是另外一种防锯齿方法。
锐化图像会令锯齿明显
  锐化图像会增加边缘的对比度,使锯齿现象更加明显,读者可以在“锐化”专题看到关于这个问题的详细介绍。在下图中,屋顶与天空交接的边缘锯齿明显,正是因为边缘的对比度由于锐化而变得强烈。
双线性插值算法,对图像进行缩放。网上有很多这方面的资料,介绍的也算明白。但是,这些文章只介绍了算法,并没有具体说怎么实现以及怎么实现最好,举个例子,你可以按照网上文章的算法自己写一个双线性插值程序,用它对一张图片进行处理,然后再用matlab或者openCV的resize函数对同一张图片进行处理,得到的结果是不一样的,如果源图片较小,效果差距就更大。

双线性插值旋转图象 高人帮帮忙

为了方便理解,先考虑一维情况下的线性插值
对于一个数列c,我们假设c[a]到c[a+1]之间是线性变化的
那么对于浮点数x(a&lt;=x&lt;a+1),c(x)=c[a+1]*(x-a)+c[a]*(1+a-x);
这个好理解吧?

把这种插值方式扩展到二维情况
对于一个二维数组c,我们假设对于任意一个浮点数i,c(a,i)到c(a+1,i)之间是线性变化的,c(i,b)到c(i,b+1)之间也是线性变化的(a,b都是整数)
那么对于浮点数的坐标(x,y)满足(a&lt;=x&lt;a+1,b&lt;=y&lt;b+1),我们可以先分别求出c(x,b)和c(x,b+1):
c(x,b) = c[a+1][b]*(x-a)+c[a][b]*(1+a-x);
c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x);
好,现在已经知道c(x,b)和c(x,b+1)了,而根据假设c(x,b)到c(x,b+1)也是线性变化的,所以:
c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y)
这就是双线性插值,不知道我这么讲是否将明白了

我不太明白画板取值是什么意思
如果直接理解成亮度值的话就这么写:
//返回x,y的像素值,c[a][b]表示(a,b)的像素值
int getColor(double x,double y,int[][] c){
int a = (int)x;
int b = (int)y;
double dx = x-a;
double dy = y-b;
return (int)((c[a][b]*(1-dx)+c[a+1][b]*dx)*(1-dy)+(c[a][b+1]*(1-dx)+c[a+1][b+1]*dx)*dy);
}
我觉得这样的代码好像写不了注释

最近邻插值,双线性插值有什么不同

双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。
最近邻插值是将变换后的图像中的原像素点最邻近像素的灰度值赋给原像素点的方法。
都是将图片以一定的映射规律转换到新的坐标中。

MATLAB的问题,双线性插值、

双线性插值函数为
u(x,y)=a +bx+cy+dxy
u(0,0)=a=1-->a=1
u(0,1)=a+c=3-->c=2
u(1,0)=a+b=2-->b=1
u(1,1)=a+b+c+d=5-->d=1
u(x,y)=1+x+2y+xy
坐标为(0.2,0.4)该点处u(0.2,0.4)=1+0.2+2*0.4+0.2*0.4=2.08