本文主要是介绍图像处理与视觉感知复习--三维重建基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 完整的摄像机模型(摄像机内外参数)
- 理解三个参考系
- 齐次坐标系中的投影变换
- 摄像机标定
- 单视图几何
- 无穷远点、无穷远线、无穷远平面
- 影消点、影消线
- 三维重建基础与极几何
- 极几何、本质矩阵与基础矩阵
- 双目立体视觉
- 视差或深度的推导过程
完整的摄像机模型(摄像机内外参数)
- 径向畸变:图像像素点以畸变中心为中心点,沿着径向产生的位置偏差,从而导致图像中所成的像发生形变
理解三个参考系
- 摄像机坐标系
- 像平面坐标系
- 图像保存到计算机中的像素坐标系(将坐标原点从中心移到左下角)
因此需要移动(偏置)将米为单位转换成以像素为单位
( x , y , z ) → ( f ⋅ k ⋅ x z + c x , f ⋅ l ⋅ y z + c y ) 单位 k , l 为 p i x e l / m f : m (x, y, z) \rightarrow (f \cdot k \cdot \frac{x}{z} + c_x, f \cdot l \cdot \frac{y}{z} + c_y)\\单位k, l为pixel/m \ \ f:m (x,y,z)→(f⋅k⋅zx+cx,f⋅l⋅zy+cy)单位k,l为pixel/m f:m
由于焦距 f f f 和 k / l k/l k/l 都是相机内部的参数,所以将其转换成一个参数 α , β \alpha, \beta α,β
因此有将摄像机坐标系中的点 ( x , y , z ) (x, y, z) (x,y,z) 转换成像素坐标系下的二维点 ( x ′ , y ′ ) (x', y') (x′,y′)
齐次坐标系中的投影变换
齐次坐标转换
-
如何将一个坐标转换成齐次坐标呢?这里以二维和三维的情况为例:
( x , y ) ⇒ [ x y 1 ] ( x , y , z ) ⇒ [ x y z z ] (x, y) \Rightarrow \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}\ \ \ \ \ (x, y, z) \Rightarrow \begin{bmatrix} x \\ y \\ z \\ z \end{bmatrix} (x,y)⇒ xy1 (x,y,z)⇒ xyzz -
如何将一个齐次坐标变回去呢?
[ x y w ] ⇒ ( x w , y w ) [ x y z w ] ⇒ ( x w , y w , z w ) \begin{bmatrix} x \\ y \\ w \end{bmatrix} \Rightarrow (\frac{x}{w}, \frac{y}{w}) \ \ \ \ \ \begin{bmatrix} x \\ y \\ z \\ w \end{bmatrix} \Rightarrow (\frac{x}{w}, \frac{y}{w}, \frac{z}{w}) xyw ⇒(wx,wy) xyzw ⇒(wx,wy,wz)
由此可见两者不是一一对应的关系
投影变换
将非线性变换转换成线性变换
为了描述方便讲齐次坐标的字母 P h ′ → P ′ P_h' \rightarrow P' Ph′→P′, P h → P P_h \rightarrow P Ph→P
后续没有特殊说明,所有坐标均采用齐次坐标表示,因此不在使用h下标标识
有对应关系
P ′ = [ α 0 C x 0 0 β C y 0 0 0 1 0 ] ⋅ [ x y z 1 ] = M P P' = \begin{bmatrix} \alpha & 0 & C_x & 0 \\ 0 & \beta & C_y & 0 \\ 0 & 0 & 1 & 0\end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = M P P′= α000β0CxCy1000 ⋅ xyz1 =MP
由于摄像机制造工业垃圾,像素不一定是正方向,也可能是平行四边形,因此存在一个夹角
θ \theta θ
因此在 M M M 这个矩阵中加入 t h e t a theta theta 参数,实现从摄像机坐标系中的点转换到没有制作好的相机像素坐标系中
P ′ = [ α − α c o t θ C x 0 0 β s i n θ C y 0 0 0 1 0 ] ⋅ [ x y z 1 ] P' = \begin{bmatrix} \alpha & -\alpha cot \theta & C_x & 0\\ 0 & \dfrac{\beta}{sin \theta} & C_y & 0\\ 0 & 0 & 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ z \\1 \end{bmatrix} P′= α00−αcotθsinθβ0CxCy1000 ⋅ xyz1
注: c o t θ = c o s θ s i n θ cot \theta = \dfrac{cos \theta}{sin \theta} cotθ=sinθcosθ
因此这样得到的 M M M 矩阵称为投影矩阵
, 另一种写法为 K [ I 0 ] P K \begin{bmatrix}I & 0 \end{bmatrix} P K[I0]P
注:
K = [ α − α c o t θ C x 0 β s i n θ C y 0 0 1 ] [ I 0 ] = [ 1 0 0 0 0 1 0 0 0 0 1 0 ] K = \begin{bmatrix} \alpha & -\alpha cot \theta & C_x \\ 0 & \dfrac{\beta}{sin \theta} & C_y\\ 0 & 0 & 1\end{bmatrix} \ \ \ \ \ \begin{bmatrix}I & 0 \end{bmatrix} = \begin{bmatrix}1 & 0 & 0 & 0 \\ 0 & 1 & 0 &0 \\ 0 & 0 & 1 & 0\end{bmatrix} K= α00−αcotθsinθβ0CxCy1 [I0]= 100010001000 表示一个 3 × 3 3 \times 3 3×3 的单位矩阵其余元素为0, 同时将 K K K 叫做摄像机的内参数矩阵
, 可以看出来有五个自由度
α , β , θ , C x , C y \alpha, \beta, \theta, C_x, C_y α,β,θ,Cx,Cy
规范化摄像机(中间的一种性质)
同时引入世界坐标系(第四个坐标系), 为了使我们描述事物更加的方便。
同时,我们就要多做一步转换(将世界坐标系的坐标( P w P_w Pw)转换到摄像机坐标系的坐标§)
P = [ R T 0 1 ] ⋅ P w P = \begin{bmatrix}R & T \\ 0 & 1 \end{bmatrix} \cdot P_w P=[R0T1]⋅Pw
其中旋转矩阵 R R R 为一个 3 × 3 3 \times 3 3×3的矩阵, 平移矩阵 T T T 为 x , y , z x, y, z x,y,z 三个方向, 因此凑在一块是个四行四列的矩阵, R R R 和 T T T 与相机的摆放位置有关。
因此有:
P ′ = K [ I 0 ] P = K [ I 0 ] [ R T 0 1 ] P w = K [ R T ] P w = M P w P' = K \begin{bmatrix} I & 0 \end{bmatrix} P = K \begin{bmatrix} I & 0 \end{bmatrix} \begin{bmatrix} R & T\\ 0 & 1 \end{bmatrix} P_w = K \begin{bmatrix} R & T \end{bmatrix} P_w = M P_w P′=K[I0]P=K[I0][R0T1]Pw=K[RT]Pw=MPw
问题:各个符号的物理意义及其维度分别是什么?
问题:投影矩阵M有多少个自由度?
K:有五个自由度(上面有提)
R:有三个自由度(沿x, y, z旋转的角度)
T:有三个自由度(沿x, y, z平移的距离)
因此一共有11个自由度。
问题:P’转换成欧式坐标该如何写?
m 1 , m 2 , m 3 m_1, m_2, m_3 m1,m2,m3 为一行4列的向量,分块矩阵思想,在根据齐次转换成欧式坐标的方法即可。
问题如何判断一个M矩阵是否有摄像机与它对应?
定理:
首先进行一个变换
M = K [ R T ] = [ K R K T ] = [ A b ] M = K \begin{bmatrix} R & T \end{bmatrix} = \begin{bmatrix}KR & KT \end{bmatrix} = \begin{bmatrix}A & b \end{bmatrix} M=K[RT]=[KRKT]=[Ab]
令 M = ( A b ) M = (A\ \ b) M=(A b) 为 3 × 4 3 \times 4 3×4 的矩阵, a i T ( i = 1 , 2 , 3 ) a_i^T (i = 1, 2, 3) aiT(i=1,2,3) 表示有矩阵 A A A 的行
- M是透视投影矩阵的一个充分必要条件是 D e t ( A ) ≠ 0 Det(A) \neq 0 Det(A)=0(行列式的值不为0,满秩矩阵)
- M是零斜透视投影矩阵的一个充分必要条件是 D e t ( A ) ≠ 0 Det(A) \neq 0 Det(A)=0 且
( a 1 × a 3 ) ⋅ ( a 2 × a 3 ) = 0 (a_1 \times a_3) \cdot (a_2 \times a_3) = 0 (a1×a3)⋅(a2×a3)=0 - M是零倾斜且宽高比为1的透视投影矩阵的一个充分必要条件是 D e t ( A ) ≠ 0 Det(A) \neq 0 Det(A)=0
{ ( a 1 × a 3 ) ⋅ ( a 2 × a 3 ) = 0 ( a 1 × a 3 ) ⋅ ( a 1 × a 3 ) = ( a 2 × a 3 ) ⋅ ( a 2 × a 3 ) \begin{cases}(a_1 \times a_3) \cdot (a_2 \times a_3) = 0 \\ (a_1 \times a_3) \cdot (a_1 \times a_3) = (a_2 \times a_3) \cdot (a_2 \times a_3) \end{cases} {(a1×a3)⋅(a2×a3)=0(a1×a3)⋅(a1×a3)=(a2×a3)⋅(a2×a3)
投影变换的性质:
- 点投影成点
- 线投影成线
- 近大远小
- 角度不再保持
- 平行线相交
摄像机标定
摄像机标定,即求解摄像机内、外参数矩阵;摄像机内外参数矩阵描述了三维世界到二维像素的映射关系。
为了更精简符号将 P w ⇒ P , P ′ ⇒ p P_w \Rightarrow P, \ \ P' \Rightarrow p Pw⇒P, P′⇒p
有 p = M P = K [ R T ] P p = MP = K\begin{bmatrix}R & T \end{bmatrix} P p=MP=K[RT]P
一个点可以获得两个方程,要解11个未知量要用多余六对点来解,使用最小二乘法获得最优解。
注意
:这些点不能位于同一个平面
将已知的参数 M M M 转换成 [ A b ] \begin{bmatrix}A & b \end{bmatrix} [Ab], 其中 A = [ a 1 T a 2 T a 3 T ] A = \begin{bmatrix}a_1^T \\ a_2^T \\ a_3^T \end{bmatrix} A= a1Ta2Ta3T , 因此 a 1 , a 2 , a 3 , b a_1, a_2, a_3, b a1,a2,a3,b 为已知变量,进行数学运算, 其中利用的重要性质是
- r 1 与 r 2 和 r 3 的点乘为 0 , r 1 与 r 2 的叉乘为 r 3 r_1 与 r_2 和r_3的点乘为0,r_1 与r_2的叉乘为r_3 r1与r2和r3的点乘为0,r1与r2的叉乘为r3以此类推,
- 向量的模等于向量的转置乘以它自己
可以解得:
内参数: { ρ = ± 1 a 3 ( 与实际之间相差的比例 ) u 0 = ρ 2 ( a 1 ⋅ a 3 ) , v 0 = ρ 2 ( a 2 ⋅ a 3 ) c o s θ = − ( a 1 × a 3 ) ⋅ ( a 2 × a 3 ) ∣ a 1 × a 3 ∣ ⋅ ∣ a 2 × a 3 ∣ α = ρ 2 ∣ a 1 × a 3 ∣ s i n θ , β = ρ 2 ∣ a 2 × a 3 ∣ s i n θ 内参数:\begin{cases} \rho = \frac{\pm 1}{a_3}(与实际之间相差的比例)\\ \\ u_0 = \rho^2 (a_1 \cdot a_3) ,\ \ \ v_0 = \rho^2(a_2 \cdot a_3) \\ \\ cos \theta = - \dfrac{(a_1 \times a_3) \cdot (a_2 \times a_3)}{|a_1 \times a_3| \cdot |a_2 \times a_3|} \\ \\ \alpha = \rho^2 |a_1 \times a_3| sin \theta ,\ \ \ \beta = \rho^2 |a_2 \times a_3 | sin \theta \end{cases} 内参数:⎩ ⎨ ⎧ρ=a3±1(与实际之间相差的比例)u0=ρ2(a1⋅a3), v0=ρ2(a2⋅a3)cosθ=−∣a1×a3∣⋅∣a2×a3∣(a1×a3)⋅(a2×a3)α=ρ2∣a1×a3∣sinθ, β=ρ2∣a2×a3∣sinθ
外参数 { r 1 = ( a 2 × a 3 ) ∣ a 2 × a 3 ∣ , r 3 = ± a 3 ∣ a 3 ∣ , r 2 = r 3 × r 1 T = ρ K − 1 b ( T 为 3 × 1 的矩阵,里面三个平移参数 ) 外参数 \begin{cases} r_1 = \dfrac{(a_2 \times a_3)}{|a_2 \times a_3|}, \ \ r_3 = \dfrac{\pm a_3}{|a_3|}, \ \ r_2 = r_3 \times r_1\\ \\ T = \rho K^{-1} b(T为 3 \times 1的矩阵,里面三个平移参数) \end{cases} 外参数⎩ ⎨ ⎧r1=∣a2×a3∣(a2×a3), r3=∣a3∣±a3, r2=r3×r1T=ρK−1b(T为3×1的矩阵,里面三个平移参数)
有畸变的摄像机标定,不考pass
单视图几何
无穷远点、无穷远线、无穷远平面
x ∞ = [ x 1 ′ x 2 ′ 0 ] x_{\infty} = \begin{bmatrix}x'_1 \\ x'_2 \\ 0 \end{bmatrix} x∞= x1′x2′0
第三维为0,就表示齐次坐标向欧式坐标转换的时候分母为零,因此表示无穷远点
设两个平行线 l = [ a b c ] , l ′ = [ a ′ b ′ c ′ ] l= \begin{bmatrix}a \\ b \\ c \end{bmatrix}, \ \ l' = \begin{bmatrix}a' \\ b' \\ c' \end{bmatrix} l= abc , l′= a′b′c′ ,求两条线的交点,就是求两个向量 l ′ , l l', l l′,l的叉乘结果
l × l ′ = [ b − a 0 ] = x ∞ l \times l' = \begin{bmatrix}b \\ -a \\ 0 \end{bmatrix} = x_{\infty} l×l′= b−a0 =x∞
由此可以看到一条直线的无穷远点,就是这条方向的方向 − b a -\dfrac{b}{a} −ab取出来后面加个0
无穷远线可以认为平面上线的方向的集合。无穷远点集位于称为无穷远线的一条线上。
l ∞ = [ 0 0 1 ] l_\infty = \begin{bmatrix}0 \\ 0 \\ 1 \end{bmatrix} l∞= 001
证明:任意的无穷远点 [ x 1 x 2 0 ] ⋅ [ 0 0 1 ] = 0 \begin{bmatrix}x_1 \\ x_2 \\ 0 \end{bmatrix} \cdot \begin{bmatrix}0 \\ 0 \\ 1 \end{bmatrix} = 0 x1x20 ⋅ 001 =0在这条直线上
三维空间中的无穷远点
定义:
- 平行平面在无穷远处交于一条公共线,即无穷远直线;
- 两条或多条无穷远直线的集合定义为无穷远平面
同理可知 无穷远点 x ∞ = [ a b c 0 ] , 无穷远平面 Π ∞ = [ 0 0 0 1 ] 无穷远点x_\infty = \begin{bmatrix}a \\ b \\ c \\ 0 \end{bmatrix}, \ \ 无穷远平面\Pi_\infty = \begin{bmatrix} 0 \\ 0\\ 0\\ 1 \end{bmatrix} 无穷远点x∞= abc0 , 无穷远平面Π∞= 0001
影消点、影消线
线的变化要取逆转置
- 影消点:三维空间中的无穷远点在图像平面上的投影点
图像中的两条直线的交点如果在影消线上;则这两条线是3D空间中的平行线
影消点与直线方向:已知影消点和摄像机内部参数可以求对应直线为摄像机坐标系
的方向为
d = K − 1 ∣ ∣ K − 1 v ∣ ∣ d = \dfrac{K^{-1}}{|| K^{-1} v||} d=∣∣K−1v∣∣K−1
影消线与平面法向量: n n n为平面法向量、 K K K为摄像机内参数, l h l_h lh为影消线
有 n = K T l h n = K^T l_h n=KTlh
三维重建基础与极几何
极几何、本质矩阵与基础矩阵
- 极几何:描述了同一场景或物体的两个视点图像间的几何关系
- 本质矩阵:对规范化摄像机(内参数是单位矩阵)拍摄的两个视点图像间的极几何关系进行代数描述
- 基础矩阵:对一般的透视摄像机拍摄的两个视点的图像间的极几何关系进行代数描述
- 基础矩阵F:刻画了两幅图像的极几何关系,即相同场景在不同视图中的对应关系,F包含摄像机内参数信息,应用:三维重构,多视图匹配
E = T × R = [ T × ] R , E 称为本质矩阵 , 有 p ′ T E p = 0 E = T \times R = [T_{\times}] R, E称为本质矩阵, 有p'^T E p = 0 E=T×R=[T×]R,E称为本质矩阵,有p′TEp=0
基础矩阵就是要现将摄像机转变为规范相机 p c = K − 1 p , p c ′ = K ′ − 1 p ′ p_c = K^{-1}p, p'_c = K'^{-1} p' pc=K−1p,pc′=K′−1p′
F称为基础矩阵
F = K ′ − T [ T × ] R K − 1 F = K'^{-T} [T_{\times}]RK^{-1} F=K′−T[T×]RK−1
知道一个视图的点 p p p和基础矩阵就能知道另一个视图的极线
- p p p 对应的极线是 l ′ ( l ′ = F p ) l'(l' = Fp) l′(l′=Fp)
- p ′ p' p′ 对应的极线是 l ( l = F T p ′ ) l (l = F^T p') l(l=FTp′)
- F e = 0 与 e ′ T F = 0 Fe = 0 与 e'^T F = 0 Fe=0与e′TF=0
- F是奇异的(秩为2)
- F有7个自由度( d e t ( F ) = 0 det(F) = 0 det(F)=0减少了一个自由度,尺度是无法确定的)
求 F F F 的方法:归一化八点法:
- 分别计算左图和右图的 T T T 和 T ′ T' T′
- 坐标归一化: q i = T p i , q i ′ = T ′ p i ′ q_i = T p_i, q_i' = T' p_i' qi=Tpi,qi′=T′pi′
- 通过八点法计算矩阵 F q F_q Fq
- 逆归一化 F = T ′ T F q T ( F q 是通过奇异值分解 S V D 将最后一行变为 0 后的结果 ) F = T'^{T} F_qT(F_q是通过奇异值分解SVD将最后一行变为0后的结果) F=T′TFqT(Fq是通过奇异值分解SVD将最后一行变为0后的结果)
双目立体视觉
视差或深度的推导过程
极几何特例:平行视图
- 两个图像平面平行
- 基线平行于图像平面,极点 e e e 和 e ′ e' e′位于无穷远处
平行视图的基础矩阵 F = [ e × ′ ] K ′ R K − 1 = [ e × ′ ] = [ 0 0 0 0 0 − 1 0 1 0 ] F = [e'_\times] K' R K^{-1} = [e'_\times] = \begin{bmatrix}0 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{bmatrix} F=[e×′]K′RK−1=[e×′]= 0000010−10
极线就为 l = F T p ′ = [ 0 0 0 0 0 1 0 − 1 0 ] [ p u ′ p v ′ 1 ] = [ 0 1 − p v ′ ] l = F^T p' = \begin{bmatrix}0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & -1 & 0 \end{bmatrix} \begin{bmatrix}p_u' \\ p_v' \\ 1 \end{bmatrix} = \begin{bmatrix}0 \\ 1 \\ -p'_v \end{bmatrix} l=FTp′= 00000−1010 pu′pv′1 = 01−pv′
- 极线是水平的平行于 u u u 轴
- 极点位于无穷远
- p p p 和 p ′ p' p′ 的 v v v 坐标一样
因此简化都从一个视角找另一个视角的对应点,只需要沿着扫描线寻找即可
俯视寻找集合关系:
利用相似性质
p u ′ 在左边视图的位置是作个平行线于视图的交点 p_u'在左边视图的位置是作个平行线于视图的交点 pu′在左边视图的位置是作个平行线于视图的交点
因此有求P点距离 O 1 , O 2 O_1, O_2 O1,O2 的距离
z = B f p u − p u ′ z = \dfrac{Bf}{p_u - p_u'} z=pu−pu′Bf
而 p u − p u ′ p_u - p_u' pu−pu′ 就称之为视差, 视差与深度 z z z 成反比
更具体的几何关系:
北京邮电大学 鲁鹏
这篇关于图像处理与视觉感知复习--三维重建基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!