Bootstrap

利用多项式实现图像几何校正(Matlab实现)

1.原理简述:      

      根据两幅图像中的一些已知对应点(控制点对),建立函数关系式,通过坐标变换,实现失真图像的几何校正。

                                      

      

        设两幅图像坐标系统之间畸变关系能用解析式来描述:

                             

         根据上述的函数关系,可以依次计算畸变图像每个像素的矫正坐标值,保持各像素值不变,这样生成一幅矫正图像。

2.实现过程:     

        (1)因此首先要得到多项式,matlab提供了拟合多项式的函数 Isqcurvefit,

                               格式:lsqcurvefit(f,a,x,y)

                 f:符号函数句柄

                a:最开始预估的值(预拟合的未知参数的估计值)。如上面的问题如果我们预估A为1,B为2,则a=[1 2]

                x:我们已经获知的x的值

                y:我们已经获知的x对应的y的值

               函数的返回值为对应多项式系数组成的一维数组。

示例(二次多项式):建立由校正图像到畸变图像的函数

function [F] = fun(a,b)
x = b(:,1);
y = b(:,2);
F = a(1)+a(2)*x+a(3)*y+a(4)*x.^2+a(5)*x.*y+a(6)*y.^2; 
end


x0 = fixedPoints(:,1);
y0 = fixedPoints(:,2);
x1 = movingPoints(:,1);
y1 = movingPoints(:,2);
data = [x1,y1];
a = [1 1 1 1 1 1];
a1 = lsqcurvefit('fun',a,data,x0);
a2 = lsqcurvefit('fun',a,data,y0);

         (2)根据得到的二项式,由校正图像每个像素坐标(x,y)出发,算出在已知畸变图像上的对应坐标(x',y'),使像元一一对应,赋予校正图像对应畸变图像的像元

的像素值,最终得到校正图像。

示例:

J2 = uint8(zeros(size(J)));
for rgb = 1:3
    for i = 1:m
        for j = 1:n
            if round(fun(a1,[i,j]))>=1 && round(fun(a1,[i,j]))<=c && round(fun(a2,[i,j]))>=1 && r
;