CV学习笔记-相机模型(欧式变换及仿射变换)

简介: CV学习笔记-相机模型(欧式变换及仿射变换)

相机模型

1.相机模型原理

1. 相机成像

相机成像是一个小孔成像模型,将现实生活中的三维空间物体映射到二维的成像平面上,进而生成二维的图像。

2018122814580746.png

相机模型中的坐标系:

  • 世界坐标系Pw(Xw, Yw, Zw):对应真实客观三维世界的坐标系,也称为客观坐标系,表征物体在真实世界中的位置坐标。世界坐标系是随着物体的大小和位置变化的,单位一般是长度单位。
  • 摄像机坐标系PO(x, y, z):对应以相机的光心为原点的坐标系,其以平行于图像的x和y方向为x轴y轴,z轴与光轴平行,单位也为长度单位。

     图像物理坐标系P’(x’, y’): 对应以主光轴和图像平面交点为坐标原点的坐标系,单位仍为长度单位。

     图像像素坐标系P(u, v): 对应以图像的顶点为坐标原点的坐标系,u和v的方向平行于x’和y’方向, 单位是像素

2018122814580746.png

相机成像流程:

image.png

2. 坐标变换

欧式变换: 在任何的三维空间的物体,都可以以三维坐标系表示,也即在现实空间中的物体的点,在不同的坐标系下的坐标是不一样的,因为基底不同,那么一个固定的点,在一个坐标系下的坐标,如果转换到另一个坐标系下,使得另外一个坐标系能够确定这个位置,就需要用到欧式变换。 任何一个坐标系到另一个坐标系的转换可以通过旋转和平移完成。

平移变换&旋转变换&齐次坐标:

平移变换是指转换双方坐标系经过有限次平移可以重合,情形例如高帽在人脸的正上方的情况,这样人脸的中心坐标系转换到高帽中心坐标系,仅需将坐标原点向上平移变换即可,没有坐标轴的旋转偏移,在线性代数里的平移变换是在空间坐标系中所在位置的转换,习惯用坐标系中的O的向量表示,通过向量的加常量即可实现,多次平移变换直接进行向量相加即可实现。平移变换比较简单易懂,而旋转变换较为复杂,可以通过二维坐标旋转变换推广到三维笛卡尔坐标系下,对于空间里的刚体来说,是有六个自由度的,绕xyz的转动自由度有三个,而在二维平面中,只能绕垂直平面的轴旋转,即只能有一个自由度,那么对于三维坐标系来说能够写出3×3的R矩阵,记为旋转矩阵

2018122814580746.png

上式表示从B坐标系转换到A坐标系的旋转矩阵中的每一列子向量,等价为B坐标系的坐标轴单位向量在A坐标系中的表示。不难发现这个旋转矩阵是正交单位阵,故有以下推论:

2018122814580746.png

上式说明,矩阵的每一行就是A坐标系的坐标轴在B坐标系中的表示。旋转变换的公式如下:

2018122814580746.png

连续的旋转变换只要矩阵相乘即可。当旋转平移变换同时出现的时候,引入齐次坐标变换的概念;

2018122814580746.png

由上面的结论不难推出此变换过程,这个过程如果用一个矩阵表示,会简洁很多,齐次坐标变换矩阵也应运而生,上图的变换过程等效于以下表达:

2018122814580746.png

T矩阵就是该变换中的齐次坐标变换矩阵,齐次坐标变换矩阵T是一个四阶方阵,可以同时表示旋转变换和平移变换,齐次坐标变换矩阵公式表达如下:

2018122814580746.png

将上面推导过程的角标简化,举个例子:

若将向量a进行两次欧式变换,旋转和平移分别为R1,t1和R2,t2,分别得到:

b = R1*a + t1; c = R2*b + t2; c = R2*(R1*a + t1) + t2

2018122814580746.png

世界坐标系到相机坐标系:

世界坐标系到相机坐标系的变换中也不例外的存在旋转矩阵R和平移矩阵t,关系表示为:

2018122814580746.png

相机坐标系到图像物理坐标系:

  • 原理:相似三角形

2018122814580746.png

2018122814580746.png

  • 矩阵表示为:f为焦距
  • 2018122814580746.png
  • 图像物理坐标系到图像像素坐标系:
  • 原理:坐标偏移(dx、dy表示x和y方向上的一个像素分别占多少个长度单位,dx、dy可能为小数)
  • 2018122814580746.png
  • 2018122814580746.png
  • 齐次坐标表示:
  • 2018122814580746.png
  • 相机坐标系到图像像素坐标系的连续欧式变换:
  • 2018122814580746.png
  • 世界坐标系到图像像素坐标系:
  • 推导过程:
  • 2018122814580746.png
  • 2018122814580746.png
  • 结论:
  • 2018122814580746.png

2. 镜头畸变

1. 镜头畸变

由于制造精度以及组装工艺的偏差,透镜的成品往往会产生畸变,导致原始图像失真。镜头畸变分为径向畸变和切向畸变。

2018122814580746.png

2. 径向畸变

  • 原因 :由于透镜的形状产生的畸变称为径向畸变,透镜径向畸变后点位的偏移示意图:

2018122814580746.png

枕形畸变

2018122814580746.png

桶形畸变

2018122814580746.png

3. 切向畸变

  • 原因:切向畸变是由于透镜本身与相机传感器平面(成像平面)或图像平面不平行而产生的。(大多是由于透镜被粘贴到镜头模组上的安装偏差导致)

2018122814580746.png

4. 畸变矫正

方法:

  • 径向畸变和切向畸变模型中一共有5个畸变参数,在Opencv中他们被排列成一个5*1的矩阵,依次包含k1、k2、p1、p2、k3(这5个参数就是相机标定中需要确定的相机的5个畸变系数),经常被定义为Mat矩阵的形式
Mat distCoeffs = Mat(1.5, CV_32FC1, Scalar::all(0));
  • 求得这5个参数后,就可以校正由于镜头畸变引起的图像的变形失真。

2018122814580746.png

2018122814580746.png

3. 透视变换

1.定义

透视变换又称投影映射(Projective Mapping),是将一个图片从原有平面投影到一个新的视平面(Viewing Plane)的过程。

2. 目的

现实中的物体为直线的棱等在图片中可能是斜线,通过透视变换可以把这条斜线变换成直线。

3. 与仿射变换的区别

仿射变换是透视变换的一个特例,仿射变换(Affine Transformation 或 Affine Map)是指在几何中图像从一个向量空间进行一次线性变换和一次平移,变换到另一个向量空间的过程。

2018122814580746.png

4. 变换过程

  • 变换公式:

2018122814580746.png

下式中的X,Y是原始图片坐标(上式的x,y),对应得到变换后的图片坐标(X’;Y’;Z’)其中Z’=1:

2018122814580746.png

一般地,我们令a33=1,展开上面公式,得到一个点的情况:

2018122814580746.png

image.png个人学习笔记,仅学习交流,转载请注明出处!

相关文章
|
13天前
|
存储 编解码 资源调度
【OpenCV】—线性滤波:方框滤波、均值滤波、高斯滤波
【OpenCV】—线性滤波:方框滤波、均值滤波、高斯滤波
|
5月前
[Halcon&几何] 直线的垂线与延长线的计算
[Halcon&几何] 直线的垂线与延长线的计算
117 1
|
存储 API 图形学
OpenCV_11 轮廓检测:图像的轮廓+绘制轮廓+轮廓近似+边界矩形+椭圆拟合+直线拟合
轮廓检测指检测图像中的对象边界,更偏向于关注上层语义对象。如OpenCV中的findContours()函数, 它会得到每一个轮廓并以点向量方式存储,除此也得到一个图像的拓扑信息,即一个轮廓的后一个轮廓、前一个轮廓等的索引编号。
1156 0
|
资源调度 计算机视觉
CV10 图像模糊(均值、高斯、中值、双边滤波)
当我们只想得到感兴趣的物体时,通过图像模糊,可以将那些尺寸和亮度较小的物体过滤掉,较大的物体则易于检测。除了降低噪声,这就是图像平滑(模糊)的另一个重要应用:减少噪点,突出ROI,以便目标提取。
231 0
|
计算机视觉
数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)
数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)
327 0
数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)
|
编解码 资源调度 算法
CV学习笔记-尺度不变特征变换(SIFT)
CV学习笔记-尺度不变特征变换(SIFT)
387 0
CV学习笔记-尺度不变特征变换(SIFT)
Matalb-图像均值滤波,中值滤波,梯度锐化(sobel算子)的实现
Matalb-图像均值滤波,中值滤波,梯度锐化(sobel算子)的实现
158 0
Matalb-图像均值滤波,中值滤波,梯度锐化(sobel算子)的实现
|
机器学习/深度学习 资源调度 算法
【图像插值】基于稀疏拉普拉斯滤波器处理红绿蓝三种像素实现插值效果附matlab代码
【图像插值】基于稀疏拉普拉斯滤波器处理红绿蓝三种像素实现插值效果附matlab代码
|
Serverless API 计算机视觉
opencv仿射变换和透视变换(一)理论篇
opencv仿射变换和透视变换(一)理论篇
930 0
opencv仿射变换和透视变换(一)理论篇
|
计算机视觉
opencv仿射变换和透视变换(二)实践篇
opencv仿射变换和透视变换(二)实践篇
187 0
opencv仿射变换和透视变换(二)实践篇