一般的针孔相机模型如下:
三维坐标点经过透视投影变换,转换到一个图像平面坐标点。
而相机透镜还存在一定的畸变,包括横向畸变和切向畸变。
因此,针孔相机模型又被扩展为以下模型:
首先,世界坐标被转换为相机坐标,由X,Y,Z到x,y,z;
然后,归一化,z=1处,x,y的投影坐标x`,y`;
接下来,对投影坐标,进行畸变处理;
最后,由相机坐标转换到图像坐标。
在使用广角镜头或鱼眼相机时,原始图像存在畸变比较严重。
在图像识别的很多应用场景中,消除图像的畸变是图像预处理的首要问题。
通过相机标定,很容易拿到相机的内部参数,包括焦距、光心和畸变系数。
以上过程,就是透镜畸变前后图像坐标变换的公式。具体步骤如下:
1. 由图像坐标系反变换到相机坐标系中
2. 然后,校正反变换R-1,一般无校正变换的相机,默认为单位矩阵
3. 归一化,并进行相机透镜畸变处理
4. 由相机坐标转换到图像坐标。
由此,得到由针孔模型到透镜畸变畸变模型相互变换的对应关系u <--> mapx, v <--> mapy
initUndistortRectifyMap函数就是完成了以上工作。
opencv中,remap与undistortion都是消除畸变的函数,undistortion在设置了一些参数后调用了remap函数,二者的算法实质是一样的。由目标图像的坐标,找到对应的原始图像坐标,然后将其值复制到目标图像。大致思路是如此,由于图像大小和变换,需要插值或近似的方法,如最邻近法、线性插值等
转自:
http://blog.csdn.net/viewcode/article/details/7967253