相机标定问题已经是比较成熟的问题,OpenCV中提供了比较全面的标定、矫正等函数接口。但是如果我想通过一张矫正好的图像,想获得原始的畸变图,却没有比较好的方法,这里讨论了点的畸变和反畸变问题。
1.问题提出:给定一些已经经过矫正的二维点集,如何获得矫正前带畸变的二维点集?
2.理论基础:理论基础无它,就是相机的小孔成像模型和畸变参数模型,
这里需要注意,k1,k2等为径向畸变参数,p1,p2为切向畸变参数,s1,s2为薄棱镜畸变参数(常忽略),x'为理想的无畸变的图像像素坐标或者点(Points)坐标,x''是带透镜畸变参数的图像像素或点坐标,上述公式详尽表达了它们之间的关系。通俗点讲,x',y'是指通过针孔模型求出来的理想点的位置,x'',y''是其真实位置,所以要通过后面的畸变模型进行近似,获得x'',y''的值,但是在实际应用时,x'',y''通常是已知的,即我们通过相机获得了带畸变的图像,但是我们需要反算回去得到x',y',OpenCV提供了这样的过程函数接口,可以直接使用。
而这里想做的是通过矫正图得到畸变图点,即通过x‘,y’得到x'',y'',所以只要通过上述公式进行求解就行了。
3.求解过程:
直接给出相关程序:
void myDistortPoints(const std::vector<:point2d> & src, std::vector<:point2d> & dst, const cv::Mat & cameraMatrix,