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