您的位置:首页 > 运维架构

OpenGL投影矩阵与相机模型(Set Projection Matrix for Pinhole Camera Model)

2015-09-22 21:16 736 查看
出处:http://oliver.zheng.blog.163.com/blog/static/1424115952013349234838/

(转载自"结冰的雪"百度空间)

目的:用OpenGL模拟针孔相机的视角。

针孔相机模型(Pinhole camera model):内参(intristric parameters)f(focal length)、cc(principle point)、kc(distroations)、alpha_c(skew coefficient);外参(extristric parameters)R(旋转)、t(平移)。详见http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html。相机可以用http://www.vision.caltech.edu/bouguetj/calib_doc/的方法标定(Calibrate)。

OpenGL 投影矩阵(projection matrix):推导过程详见http://www.songho.ca/opengl/gl_projectionmatrix.html,OpenGL的矩阵变换详见http://www.songho.ca/opengl/gl_transform.html。矩阵形式如下:



设置方法:



注意:fc与cc单位必须一致,或者为毫米,或者为像素。zfar与znear单位必须一致,一般为mm,即相机能看到的范围。而fc/cc与znear/zfar的单位可以不一致。

P的逆矩阵如下:



OpenGL 模型投影矩阵(modelview matrix):由于OpenGL默认视角位于原点,面向-z轴,而相机视角一般如下图所示,x轴向右,y轴向下,z轴向里,即物体在前方。所以要先将视角变化一下:gluLookAt(0, 0, 0, 0, 0, 1, 0, -1, 0)可以完成这个任务,它产生矩阵Mv。





世界坐标变换到相机坐标需要一个矩阵Mc,由旋转和平移构成:



所以最终的modelview matrix为:



至此P、M全部设置完成。

关于镜头畸变(lens distortion):这个比较复杂,如果镜头的畸变比较小简单忽略掉就可以了。如果不能忽略可以参考以下内容:

Lens Correction and Distortion:http://paulbourke.net/miscellaneous/lenscorrection/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: