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

出处: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。矩阵形式如下:

OpenGL投影矩阵与相机模型(Set Projection Matrix for Pinhole Camera Model) - 烂土豆Oliver - 烂土豆Oliver的博客
设置方法:

OpenGL投影矩阵与相机模型(Set Projection Matrix for Pinhole Camera Model) - 烂土豆Oliver - 烂土豆Oliver的博客

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

P的逆矩阵如下:

OpenGL投影矩阵与相机模型(Set Projection Matrix for Pinhole Camera Model) - 烂土豆Oliver - 烂土豆Oliver的博客

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

OpenGL投影矩阵与相机模型(Set Projection Matrix for Pinhole Camera Model) - 烂土豆Oliver - 烂土豆Oliver的博客 OpenGL投影矩阵与相机模型(Set Projection Matrix for Pinhole Camera Model) - 烂土豆Oliver - 烂土豆Oliver的博客

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

OpenGL投影矩阵与相机模型(Set Projection Matrix for Pinhole Camera Model) - 烂土豆Oliver - 烂土豆Oliver的博客

所以最终的modelview matrix为:

OpenGL投影矩阵与相机模型(Set Projection Matrix for Pinhole Camera Model) - 烂土豆Oliver - 烂土豆Oliver的博客

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

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

Lens Correction and Distortion:http://paulbourke.net/miscellaneous/lenscorrection/


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值