零蚀
-
相机分类
-
图像形成的原理,是由于光线在物体上,大部分被物体吸收,少部分不被吸收光线发生反射或者漫反射,从而使我们觉···得出现了不同的颜色。如果光线都被吸收了,则是黑色。而相机是通过将光信号转化为电信号,从而保存为数字信息,
-
相机分为2D相机 和 3D相机,2D相机会产生 图像数据,其中包括 灰度图,彩色图,而3D相机会生成 图形数据 ,包括深度图,点云图。
-
2D相机分为CCD 和 CMOS两种主流相机。CCD传感器在灵敏度、分辨率、噪声控制等方面都优于CMOS传感器,而CMOS传感器则具有低成本、低功耗、以及高整合度的特点。这两种相机的区别主要是读取数据的方式不同(读出结构)
- CCD charge-coupled device 电荷耦合器件
- CMDS complementary metal-oxide semiconductor 互补金属氧化物半导体。
- 从这里的传感器只能采集光信息(强度),如果想产生彩色照片需要在传感器前面加上Bayer滤镜阵列。由于人眼对绿色比较敏感,所以绿色的像素占总素的1/2,而红色和蓝色各占1/4。这种情况会导致图像失真,所以会加失真滤光片。
-
3D像机分为 TOF相机,双目相机,结构光相机,激光扫描仪etc,主流相机。TOF相机,可以获取深度信息,也可以获取灰度信息,它会发出光然后接收信息,常用于游戏,物流,或需要红外的需求;双目相机通过两个普通摄像头来获取图像的深度信息,在外界环境较差的情况下,接收信息的数据也会较差;结构光相机,通过红外发射器,发射人眼不可见的随机红外斑点,这些点具有一定的结构,根据斑点的大小形状来确定物体;激光扫描仪也是通过发送激光,通过两个摄像头来获取高频率的激光反射或折射,以进行测量和校准。
-
-
相机模型
- 感光元件在获取到源世界的东西的时候,我们的数据可能有旋转,有变形,所以我们要通过相机的模型来设置图像数据。这里的在计算图像的物体距离,需要将像素坐标系转为图像坐标系,从而得到像素转换的数据。
-
图像旋转
-
二维旋转计算:我们之前有用过矩阵的仿射计算来旋转图像,它的原理是通过矩阵计算,来计算得到旋转的每个点的坐标,如下。
[ X ′ Y ′ ] [ c o s θ − s i n θ s i n θ c o s θ ] = [ X Y ] \begin{bmatrix} X' \\ Y'\end{bmatrix}\begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} = \begin{bmatrix} X \\ Y \end{bmatrix} [X′Y′][cosθsinθ−sinθcosθ]=[XY]
- 3维坐标系的旋转,如果旋转是按照z轴进行旋转,那么计算的公式我们可以用到之前的二维计算的方式得的
{ x ’ = x c o s θ − y s i n θ + z y ′ = x s i n θ + y c o s θ + z z ′ = 0 + 0 + z \begin{cases} x’ = xcos\theta - ysin\theta + z \\ y'= xsin\theta + ycos\theta + z \\ z' = 0 + 0 + z\end{cases} ⎩⎪⎨⎪⎧x’=xcosθ−ysinθ+zy′=xsinθ+ycosθ+zz′=0+0+z
- 由此可得,绕z轴旋转的公式为
R z ⟹ [ x ′ y ′ z ′ ] [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] = [ x y z ] R_z \implies \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} \begin{bmatrix} cos\theta & -sin\theta & 0 \\ sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} x \\ y \\ z \end{bmatrix} Rz⟹⎣⎡x′y′z′⎦⎤⎣⎡cosθsinθ0−sinθcosθ0001⎦⎤=⎣⎡xyz⎦⎤
- 按照这种规律,如果按照某坐标轴旋转,就是将某平面上点按照二维平面的旋转规律进行旋转处理,可得以下公式,(按照Y轴旋转,和x轴旋转)。
R y ⟹ [ x ′ y ′ z ′ ] [ c o s θ 0 s i n θ 0 1 0 − s i n θ 0 c o s θ ] = [ x y z ] R_y \implies \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} \begin{bmatrix} cos\theta & 0 & sin\theta \\ 0 & 1 & 0 \\ -sin\theta & 0 & cos\theta \end{bmatrix} = \begin{bmatrix} x \\ y \\ z \end{bmatrix} Ry⟹⎣⎡x′y′z′⎦⎤⎣⎡cosθ0−sinθ010sinθ0cosθ⎦⎤=⎣⎡xyz⎦⎤
R x ⟹ [ x ′ y ′ z ′ ] [ 1 0 0 0 c o s θ − s i n θ 0 s i n θ c o s θ ] = [ x y z ] R_x \implies \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & cos\theta & -sin\theta \\ 0 & sin\theta & cos\theta \end{bmatrix} = \begin{bmatrix} x \\ y \\ z \end{bmatrix} Rx⟹⎣⎡x′y′z′⎦⎤⎣⎡1000cosθsinθ0−sinθcosθ⎦⎤=⎣⎡xyz⎦⎤
-
而3维中的旋转,需要经过3个纬度依次的旋转,然后经过平移后得到新的坐标点。这里的R是上面旋转的综合,t为平移 [ R t O ⃗ 1 ] [ X w Y w Z w 1 ] \begin{bmatrix} R & t \\ \vec{O} & 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} [ROt1]⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤
-
根据图像的坐标计算像素坐标,dx 表示像素的宽度,dy表示像素的高度。
u = x d x + u 0 u = \frac{x}{d_x} + u_0 u=dxx+u0
v = y d y + v 0 v = \frac{y}{d_y} + v_0 v=dyy+v0- 可得
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{1}{d_x} & 0 & u_0 \\ 0 & \frac{1}{d_y} & v0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} ⎣⎡uv1⎦⎤=⎣⎡dx1000dy10u0v01⎦⎤⎣⎡xy1⎦⎤
-
-
畸变
-
畸变是机器人视觉的最基本的知识。这要从小孔成像说起,小孔越小成像就越清晰,但是光线也越暗,为了避免减少光的减少,利用透镜将光线聚拢,但是镜头不可能是完美的,导致相机镜头总存在误差导致畸变,畸变参数系数 [ k 1 , k 2 , p 1 , p 2 , k 3 ] [k_1,k_2,p_1,p_2,k_3] [k1,k2,p1,p2,k3]。k表示径向畸变,p表示切向畸变。
-
径向畸变,指的是光线离透镜边缘越近,离中心越远偏折越明显,偏折越大为枕型畸变,偏折越小为桶型畸变。
-
切向畸变,这是由于制造上的缺陷,导致透镜本身和图像平面不平行而产生的,切向畸变使用 p 1 , p 2 p_1,p_2 p1,p2来表示,去切向畸变需要通过这两个参数去改变。
-
相机的标定,在之前的内容中已知,相机的固有参数为 [ f x 0 c x 0 f y c y 0 0 1 ] \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y &c_y\\0 & 0& 1 \end{bmatrix} ⎣⎡fx000fy0cxcy1⎦⎤以及相机的畸变参数 D i s t o r t i o n c o e f f i c i e n t s = ( k 1 , k 2 , p 1 , p 2 , k 3 ) Distortion_{coefficients}=(k_1,k_2,p_1,p_2,k_3) Distortioncoefficients=(k1,k2,p1,p2,k3) 决定这两个矩阵的过程,便是相机的标定(把相机对准一个有很多独立可是别的物体,通过不同的角度观察这个物体,可进一步计算每个图像来进行标定)。
-
🔗 前言
🔗 机器人视觉篇
🔗 NO.2 3D视觉 获取相机内参&畸变参数
🔗 NO.3 3D视觉 去畸变 & 3D绘制
🔗 NO.4 3D视觉 检测