计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
Posted Mr.Winter`
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变相关的知识,希望对你有一定的参考价值。
目录
0 拍照的死亡角度
拍照死亡角度一般指的是将自己脸盆子拍得特别大,拍出用鼻孔看人的狰狞面目,比如下面这张照片。在拍照的死亡角度下,镜头畸变会产生失真,让你的体态更圆润、厚实,因此部分美颜软件里人像修正中会有“去畸变”这一项功能。本文就从计算机视觉的角度谈一谈镜头畸变原理。
1 透视相机模型
透视相机模型描述了三维空间中的点与二维图像平面上像素间的映射关系。
根据小孔成像原理,透视相机的成像点与空间点之间方向相反,如图所示。为得到与空间点方向相同的成像点,将成像面沿着光轴移动到归一化成像面,接下来的讨论以归一化成像面为准。
在确定归一化成像面后,从空间点
W
X
~
^W\\!\\tildeX
WX~到像素点
u
~
\\tildeu
u~的映射可分为两步:
- 将 W X ~ ^W\\!\\tildeX WX~映射到归一化成像面的成像点 C x ~ ^C\\!\\tildex Cx~,对应的映射关系称为相机外参(Extrinsic);
- 将 C x ~ ^C\\!\\tildex Cx~映射到像素平面的像素 u ~ \\tildeu u~,对应的映射关系称为相机内参(Intrinsic)。上述各点均处于投影空间,采用齐次坐标。
2 相机矩阵
设世界坐标系 W \\left\\ \\boldsymbolW \\right\\ W相对于透视相机坐标系 C \\left\\ \\boldsymbolC \\right\\ C的位姿为
W C T = [ W C R C p w 0 0 1 ] _\\boldsymbolW^\\boldsymbolC\\!\\boldsymbolT=\\left[ \\beginmatrix _\\boldsymbolW^\\boldsymbolC\\;\\!\\!\\!\\boldsymbolR& ^\\boldsymbolC\\!\\boldsymbolp_w_0\\\\ 0& 1\\\\\\endmatrix \\right] WCT=[WCR0Cpw01]
考虑到从三维空间降维到二维平面,设世界坐标值 [ W X W Y W Z 1 ] T \\left[ \\beginmatrix ^\\boldsymbolW\\!\\!X& ^\\boldsymbolW\\!\\!\\!\\:\\!\\:Y& ^\\boldsymbolW\\!\\!Z& 1\\\\\\endmatrix \\right] ^T [WXWYWZ1]T,则
C x ~ = [ 1 0 0 0 0 1 0 0 0 0 1 0 ] , W C T W X ~ = [ C X C Y C Z ] ^\\boldsymbolC\\!\\tildex=\\left[ \\beginmatrix 1& 0& 0& 0\\\\ 0& 1& 0& 0\\\\ 0& 0& 1& 0\\\\\\endmatrix \\right] \\colorwhite ,_\\boldsymbolW^\\boldsymbolC\\!\\boldsymbolT^\\,\\,\\boldsymbolW\\!\\!\\tildeX=\\left[ \\beginarrayc ^\\boldsymbolC\\!X\\\\ ^\\boldsymbolCY\\\\ ^\\boldsymbolC\\!Z\\\\\\endarray \\right] Cx~=⎣⎡100010001000⎦⎤,WCTWX~=⎣⎡CXCYCZ⎦⎤
在上述推导过程中,称
M E = [ 1 0 0 0 0 1 0 0 0 0 1 0 ] , W C T = [ W C R C p w 0 ] \\boldsymbolM_\\boldsymbolE=\\left[ \\beginmatrix 1& 0& 0& 0\\\\ 0& 1& 0& 0\\\\ 0& 0& 1& 0\\\\\\endmatrix \\right] \\colorwhite ,_\\boldsymbolW^\\boldsymbolC\\!\\boldsymbolT=\\left[ \\beginmatrix _\\boldsymbolW^\\boldsymbolC\\;\\!\\!\\!\\boldsymbolR& ^\\boldsymbolC\\!\\boldsymbolp_w_0\\\\\\endmatrix \\right] ME=⎣⎡100010001000⎦⎤,WCT=[WCRCpw0]
为相机外参矩阵。通常令尺度因子 C Z = 1 ^\\boldsymbolC\\!Z=1 CZ=1, C x ~ = [ C X C Z C Y C Z 1 ] T = [ C x ^ C y ^ 1 ] T ^\\boldsymbolC\\!\\tildex=\\left[ \\beginmatrix \\frac^\\boldsymbolC\\!X^\\boldsymbolC\\!Z& \\frac^\\boldsymbolCY^\\boldsymbolC\\!Z& 1\\\\\\endmatrix \\right] ^T=\\left[ \\beginmatrix ^\\boldsymbolC\\!\\hatx& ^\\boldsymbolC\\!\\haty& 1\\\\\\endmatrix \\right] ^T Cx~=[CZOpenGL 与 OpenCV 相结合的计算机视觉教程 [关闭]
计算机视觉教程2-7:天使与恶魔?图文详解图像形态学运算(附代码)
计算机视觉教程3-1:全面详解图像边缘检测算法(附Python实战)
计算机视觉系列教程2-2:详解图像滤波算法(附Python实战)
PyTorch 计算机视觉的迁移学习教程代码详解 (TRANSFER LEARNING FOR COMPUTER VISION TUTORIAL )