计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变

简介: 计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变

目录

0 拍照的死亡角度

拍照死亡角度一般指的是将自己脸盆子拍得特别大,拍出用鼻孔看人的狰狞面目,比如下面这张照片。在拍照的死亡角度下,镜头畸变会产生失真,让你的体态更圆润、厚实,因此部分美颜软件里人像修正中会有“去畸变”这一项功能。本文就从计算机视觉的角度谈一谈镜头畸变原理。

image.png

1 透视相机模型

透视相机模型描述了三维空间中的点与二维图像平面上像素间的映射关系

根据小孔成像原理,透视相机的成像点与空间点之间方向相反,如图所示。为得到与空间点方向相同的成像点,将成像面沿着光轴移动到归一化成像面,接下来的讨论以归一化成像面为准。


image.png

在确定归一化成像面后,从空间点 W  ⁣ X ~ ^W\!\tilde{X}

W

 

X

~

到像素点 u ~ \tilde{u}

u

~

的映射可分为两步:


将 W  ⁣ X ~ ^W\!\tilde{X}

W

 

X

~

映射到归一化成像面的成像点 C  ⁣ x ~ ^C\!\tilde{x}

C

 

x

~

,对应的映射关系称为相机外参(Extrinsic);

将 C  ⁣ x ~ ^C\!\tilde{x}

C

 

x

~

映射到像素平面的像素 u ~ \tilde{u}

u

~

,对应的映射关系称为相机内参(Intrinsic)。上述各点均处于投影空间,采用齐次坐标。


image.png

2 相矩阵

设世界坐标系 { W } \left\{ \boldsymbol{W} \right\} {W}相对于透视相机坐标系 { C } \left\{ \boldsymbol{C} \right\} {C}的位姿为


W C  ⁣ T = [ W C    ⁣ ⁣ ⁣ R C  ⁣ p w 0 0 1 ] _{\boldsymbol{W}}^{\boldsymbol{C}}\!\boldsymbol{T}=\left[ \right]

W

C


T=[

W

C


R

0


 

C

p

w

0



1


]


考虑到从三维空间降维到二维平面,设世界坐标值 [ W  ⁣  ⁣ X W  ⁣  ⁣ ⁣  ⁣  Y W  ⁣  ⁣ Z 1 ] T \left[ \right] ^T [

W

X


 

W

Y


 

W

Z


 

1


]

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 ] ^{\boldsymbol{C}}\!\tilde{x}=\left[ \right] {\color{white} ,}_{\boldsymbol{W}}^{\boldsymbol{C}}\!\boldsymbol{T}^{\,\,\boldsymbol{W}}\!\!\tilde{X}=\left[ \right]

C

 

x

~

=


 

1

0

0


 

0

1

0


 

0

0

1


 

0

0

0


 


,

W

C


T

W

 

X

~

=


 

C

X

C

Y

C

Z


 



在上述推导过程中,称


M E = [ 1 0 0 0 0 1 0 0 0 0 1 0 ] , W C  ⁣ T = [ W C    ⁣ ⁣ ⁣ R C  ⁣ p w 0 ] \boldsymbol{M}_{\boldsymbol{E}}=\left[ \right] {\color{white} ,}_{\boldsymbol{W}}^{\boldsymbol{C}}\!\boldsymbol{T}=\left[ \right]

M

E


=


 

1

0

0


 

0

1

0


 

0

0

1


 

0

0

0


 


,

W

C


T=[

W

C


R


 

C

p

w

0




]


为相机外参矩阵。通常令尺度因子 C  ⁣ Z = 1 ^{\boldsymbol{C}}\!Z=1

C

Z=1, C  ⁣ x ~ = [ C  ⁣ X C  ⁣ Z C Y C  ⁣ Z 1 ] T = [ C  ⁣ x ^ C  ⁣ y ^ 1 ] T ^{\boldsymbol{C}}\!\tilde{x}=\left[ \right] ^T=\left[ \right] ^T

C

 

x

~

=[

C

Z

C

X



 

C

Z

C

Y



 

1


]

T

=[

C

 

x

^


 

C

 

y

^



 

1


]

T


从 C  ⁣ x ~ ^C\!\tilde{x}

C

 

x

~

到像素 u ~ \tilde{u}

u

~

的映射用三维内参矩阵 K K K来表示,即


u ~ = K C  ⁣ x ~ = [ f u s c u 0 f v c v 0 0 1 ]     C  ⁣ x ~ \tilde{u}=\boldsymbol{K}^C\!\tilde{x}=\left[ \right] \,\,^C\!\tilde{x}

u

~

=K

C

 

x

~

=


 

f

u


0

0


 

s

f

v


0


 

c

u


c

v


1


 


 

C

 

x

~


其中


如图(a)所示,参数 c u c_u c

u


、 c v c_v c

v


用于中心映射——将光轴与归一化成像面的交点,即成像面中心点映射到像素平面中心,其取决于拜耳阵列与光轴如何对齐。

如图(b)所示,参数 f u f_u f

u


、 f v f_v f

v


用于归一化——将矩形的传感器阵列映射为正方形

如图©所示,参数 s s s用于正交化——当传感器阵列不正交或传感器平面与光轴不垂直时,需要引入 纠正畸变。


image.png

3 镜头畸变

上述透视相机模型基于针孔无限小的假设,但在现实中,光线通过镜头将使相机内部复杂化,产生明显的径向失真——场景中的线条在图像中显示为曲线。径向畸变(Radial Distortion)有两种类型:


筒体畸变(Barrel Distortion)

枕形失真(Pincushion Distortion)

此外由于相机组装过程中,透镜不能和成像面严格平行,会引入切向畸变(Tangential Distortion)。


image.png

针对具有镜头畸变的相机,不能直接应用透视相机模型,通常需要先通过多项式模型修正这种几何偏差,即:


{ x ^ = x ( 1 + κ 1 r 2 + κ 2 r 4 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y ^ = y ( 1 + κ 1 r 2 + κ 2 r 4 ) + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y

{

x

^

=x(1+κ

1


r

2

2


r

4

)+2p

1


xy+p

2


(r

2

+2x

2

)

y

^


=y(1+κ

1


r

2

2


r

4

)+p

1


(r

2

+2y

2

)+2p

2


xy



其中 r 2 = x 2 + y 2 r^2=x^2+y^2 r

2

=x

2

+y

2

, κ 1 \kappa _1 κ

1


、 κ 2 \kappa _2 κ

2


称为径向畸变参数, p 1 p_1 p

1


、 p 2 p_2 p

2


称为切向畸变参数; ( x , y ) (x,y) (x,y)为畸变坐标, ( x ^ , y ^ ) \left( \hat{x},\hat{y} \right) (

x

^

,

y

^


)为无畸变坐标。


image.png

🚀 计算机视觉基础教程说明


章号                                    内容

 0                              色彩空间与数字成像

 1                              计算机几何基础

 2                              图像增强、滤波、金字塔

 3                              图像特征提取

 4                              图像特征描述

 5                              图像特征匹配

 6                              立体视觉

 7                              项目实战


🔥 更多精彩专栏:


《机器人原理与技术》

《ROS从入门到精通》

《计算机视觉教程》

《机器学习》

《嵌入式系统》

《数值优化方法》


目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 测试技术
AI计算机视觉笔记二十五:ResNet50训练部署教程
该项目旨在训练ResNet50模型并将其部署到RK3568开发板上。首先介绍了ResNet50网络,该网络由何恺明等人于2015年提出,解决了传统卷积神经网络中的退化问题。项目使用车辆分类数据集进行训练,并提供了数据集下载链接。环境搭建部分详细描述了虚拟环境的创建和所需库的安装。训练过程中,通过`train.py`脚本进行了15轮训练,并可视化了训练和测试结果。最后,项目提供了将模型转换为ONNX和PT格式的方法,以便在RK3568上部署。
|
人工智能 并行计算 数据可视化
【计算机视觉】手把手教你配置stable-diffusion-webui进行AI绘图(保姆级教程)
如果说,会用各大在线的AI绘图平台来生成图像的话,算是AI绘画的小学生级别。那么,如果会使用本地化部署来运行AI绘画的话,那就已经算得上是高中毕业,进入成年啦。等你能够使用AI绘图指哪打哪,想怎么画怎么画,那就已经是大学毕业,学成归来的牛逼人物啦。
1043 1
|
机器学习/深度学习 编解码 人工智能
一文尽览 | 计算机视觉中的鱼眼相机模型及环视感知任务汇总!(下)
环视鱼眼摄像机通常用于自动驾驶中的近距离感知,车辆四面的四个鱼眼摄像头足以覆盖车辆周围的360°范围,捕捉整个近距离区域。一些应用场景包括自动泊车、交通拥堵辅助等
一文尽览 | 计算机视觉中的鱼眼相机模型及环视感知任务汇总!(下)
|
传感器 人工智能 自动驾驶
一文尽览 | 计算机视觉中的鱼眼相机模型及环视感知任务汇总!(上)
环视鱼眼摄像机通常用于自动驾驶中的近距离感知,车辆四面的四个鱼眼摄像头足以覆盖车辆周围的360°范围,捕捉整个近距离区域。一些应用场景包括自动泊车、交通拥堵辅助等
一文尽览 | 计算机视觉中的鱼眼相机模型及环视感知任务汇总!(上)
|
机器学习/深度学习 人工智能 自然语言处理
深度学习与计算机视觉教程:斯坦福CS231n · 全套笔记解读
本教程依托于 Stanford 斯坦福大学的《CS231n:深度学习与计算机视觉》,对深度学习与计算机视觉方向的图像分类、CNN、RNN、目标检测、图像分割、生成模型等各个主题做了体系化的梳理。
1875 1
深度学习与计算机视觉教程:斯坦福CS231n · 全套笔记解读
|
机器学习/深度学习 机器人 计算机视觉
计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
411 0
计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
|
传感器 机器学习/深度学习 编解码
计算机视觉教程0-2:你了解眼里所见的色彩吗?(详解RGB/HSV/Lab)
计算机视觉教程0-2:你了解眼里所见的色彩吗?(详解RGB/HSV/Lab)
264 0
计算机视觉教程0-2:你了解眼里所见的色彩吗?(详解RGB/HSV/Lab)
|
机器学习/深度学习 算法 机器人
计算机视觉教程2-7:天使与恶魔?图文详解图像形态学运算(附代码)
计算机视觉教程2-7:天使与恶魔?图文详解图像形态学运算(附代码)
160 0
计算机视觉教程2-7:天使与恶魔?图文详解图像形态学运算(附代码)
|
机器学习/深度学习 算法 机器人
计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)
计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)
370 0
计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)
|
机器学习/深度学习 存储 编解码
计算机视觉教程2-5:图像金字塔送她一朵玫瑰(附代码)
计算机视觉教程2-5:图像金字塔送她一朵玫瑰(附代码)
224 0
计算机视觉教程2-5:图像金字塔送她一朵玫瑰(附代码)

热门文章

最新文章