研究室论坛

论坛首页
   
双线性插值旋转图象 高人帮帮忙

Chow小男

 发表于 2009-9-7 14:57:14 楼主
  

  什么是双线性插值?
  怎么用双线性插值旋转图象?
  求助原理或源码 希望能详细说明下,不要太复杂了,谢谢





悠悠的棋子


 回复于 2009-9-7 14:59:24 #1楼

      为了方便理解,先考虑一维情况下的线性插值
  对于一个数列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][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);
 }
 




   
   
 
2000-2010 www.xautdipl.com
XA12346