鱼眼镜头

鱼眼相机成像模型学习

情到浓时终转凉″ 提交于 2020-01-19 00:59:02
0.前言 相机将三维世界中的坐标点(单位为米)映射到二维图像平面(单位为像素),这个过程可以用一个几何模型进行描述,其中最简单的一个模型称为针孔模型。之所以说它简单,是因为这是个线性变换;但是实际的相机上因为透镜的存在,会使光线投影到成像平面的过程中产生畸变,增加了非线性的变换过程。 1.针孔相机模型 首先不考虑畸变,建立图1所示针孔相机成像模型。 图1 小孔成像模型与相机坐标系 又是包含一堆公式的推导,贴图大法走起。 这里需要注意的有两点:1)像素坐标系中一般以左上角为原点,向右为x轴正方向,向下为y轴正方向,乍一看像是左手坐标系,实则不然,此时还是右手坐标系。2)上述方程的推导是建立在图1所示的相机坐标系的基础上;如果我们定义的相机坐标系不是图中的那样(譬如Z轴向上之类的),则不能直接套用该公式 2.鱼眼相机模型 小孔成像模型简单易懂,但实际相机中成像模型往往更复杂。假如使用小孔成像模型制造相机,则其视场角不会很大(想象一下cmos底片很小且焦距固定的情况)。而我们实际使用中甚至有视场角达到180°的鱼眼相机,使用小孔成像模型是绝对做不到的,其中实现的方式就是引入了组合透镜。 图2 鱼眼相机成像 以鱼眼相机为例,为了获取更加宽广的视野,使用组合透镜,使入射光线经过不同程度的折射投影到成像平面,使得鱼眼镜头相比于普通镜头拥有了更大的视野范围。 图3 鱼眼镜头成像简化模型

使用OpenCV标定鱼眼镜头(C++)

十年热恋 提交于 2019-12-03 07:05:48
使用OpenCV标定鱼眼镜头(C++) 本人邮箱:sylvester0510@163.com,欢迎交流讨论, 欢迎转载,转载请注明网址 http://blog.csdn.net/u010128736/ 一、使用的函数   由于鱼眼镜头和针孔镜头的模型不一样,对于鱼眼镜头的模型在之前的博客中已经做了详细介绍,这里直接使用OpenCV中的cv::fisheye::calibrate()函数进行标定。函数原型如下,需要输入目标点集,图像点集、图像尺寸。函数输出相机内参,畸变系数,旋转矩阵和平移向量,以及反投影误差。 CV_EXPORTS double calibrate(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, const Size& image_size, InputOutputArray K, InputOutputArray D, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags = 0 , TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 100 , DBL_EPSILON)); 二、采集标定图像