通过奇异值分解(SVD)求解透视变换单应性矩阵_svd 计算单应性矩阵

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[

x

y

1

]

\begin{bmatrix}u{}‘\v{}’\w\end{bmatrix}=H
\begin{bmatrix}x\y\1\end{bmatrix}\tag1
其中投影矩阵

H

H

H为一个3×33×33\times 3方阵,

H=⎡⎣⎢h1h4h7h2h5h8h3h6h9⎤⎦⎥(2)

(2)

H

=

[

h

1

h

2

h

3

h

4

h

5

h

6

h

7

h

8

h

9

]

H=\begin{bmatrix}h_{1}&h_{2}&h_{3}\
h_{4}&h_{5}&h_{6}\h_{7}&h_{8}&h_{9}\end{bmatrix}\tag2

p′(u,v)

p

(

u

,

v

)

p{}'(u, v)的坐标为

{u=u′/wv=v′/w(3)

(3)

{

u

=

u

/

w

v

=

v

/

w

\left{\begin{matrix}u=u{}‘/w
\ v=v{}’/w\end{matrix}\right.\tag3
也就是

⎧⎩⎨u=h1x+h2y+h3h7x+h8y+h9v=h4x+h5y+h6h7x+h8y+h9(4)

(4)

{

u

=

h

1

x

h

2

y

h

3

h

7

x

h

8

y

h

9

v

=

h

4

x

h

5

y

h

6

h

7

x

h

8

y

h

9

\left{\begin{matrix}u=\frac{h_{1}x+h_{2}y+h_{3}}{h_{7}x+h_{8}y+h_{9}}\
v=\frac{h_{4}x+h_{5}y+h_{6}}{h_{7}x+h_{8}y+h_{9}}\end{matrix}\right.\tag4
注意到,上式中等式的格式为矩阵

H

H

H中各行系数求比,也就说等式右边的分子分母可同时乘以一个缩放因子⎧⎩⎨u=h1x+h2y+h3h7x+h8y+h9×sxsxv=h4x+h5y+h6h7x+h8y+h9×sysy(5)(5){u=h1x+h2y+h3h7x+h8y+h9×sxsxv=h4x+h5y+h6h7x+h8y+h9×sysy\left{\begin{matrix}u=
\frac{h_{1}x+h_{2}y+h_{3}}{h_{7}x+h_{8}y+h_{9}}\times \frac{s_{x}}{s_{x}}\
v=\frac{h_{4}x+h_{5}y+h_{6}}{h_{7}x+h_{8}y+h_{9}}\times \frac{s_{y}}{s_{y}}
\end{matrix}\right.\tag5
而不影响结果的正确性,因此投影矩阵不是唯一的,矩阵元素可以等比例放缩,故在求解矩阵

H

H

H时,未知数只有8个而不是9个,只要为矩阵中任意一非零元素的赋一确定值,其他元素根据比例也就得到了确定的值。通常情况下,我们使用的矩阵是将h9h9h_{9}的值置为1而得到的,记为

H0=H,whereh9=1

H

0

=

H

,

w

h

e

r

e

h

9

=

1

H_{0}=H, where,h_{9}=1。之所以这么做,是为了使元素

h3

h

3

h_{3}、

h6

h

6

h_{6}为

u

u

u、vvv在

x

x

x和yyy都取

0

0

0时的值,这在某些应用场合是有特定意义的。如在相机标定应用中,当h9h9h_{9}取

1

1

1时,h3h3h_{3}、

h6

h

6

h_{6}为相机图像的主点(光轴与成像平面的交点)坐标,此时

h1

h

1

h_{1}、

h5

h

5

h_{5}分别是相机在水平和垂直方向的像素焦距值。

从前面的推导可以看出,每提供两个平面上的一对点,即可联立分别基于

x

x

x和yyy坐标的两个方程,而求投影矩阵

H

H

H需要8个约束条件,故需要提供4对点才能求出HHH。

我们将

(4)

(

4

)

(4)式写成如下形式

{h1x+h2y+h3−h7ux−h8uy−h9u=0h4x+h5y+h6−h7vx−h8vy−h9v=0(6)

(6)

{

h

1

x

h

2

y

h

3

h

7

u

x

h

8

u

y

h

9

u

=

0

h

4

x

h

5

y

h

6

h

7

v

x

h

8

v

y

h

9

v

=

0

\left{\begin{matrix}
h_{1}x+h_{2}y+h_{3}-h_{7}ux-h_{8}uy-h_{9}u=0\
h_{4}x+h_{5}y+h_{6}-h_{7}vx-h_{8}vy-h_{9}v=0
\end{matrix}\right.\tag6
也就是

{Xh=0Yh=0(7)

(7)

{

X

h

=

0

Y

h

=

0

\left{\begin{matrix}
\mathbf{Xh}=0\
\mathbf{Yh}=0
\end{matrix}\right.\tag7
其中

{X=(x,y,1,0,0,0,−ux,−uy,−u)Y=(0,0,0,x,y,1,−vx,−vy,−v)(8)

(8)

{

X

=

(

x

,

y

,

1

,

0

,

0

,

0

,

u

x

,

u

y

,

u

)

Y

=

(

0

,

0

,

0

,

x

,

y

,

1

,

v

x

,

v

y

,

v

)

\left{\begin{matrix}
\mathbf{X}=\left ( x,,y,,1,,0,,0,,0,,-ux,,-uy,,-u \right )\
\mathbf{Y}=\left ( 0,,0,,0,,x,,y,,1,,-vx,,-vy,,-v \right )
\end{matrix}\right.\tag8

h=(h1,h2,h3,h4,h5,h6,h7,h8,h9)T(9)

(9)

h

=

(

h

1

,

h

2

,

h

3

,

h

4

,

h

5

,

h

6

,

h

7

,

h

8

,

h

9

)

T

\mathbf{h}=\left ( h_{1},,h_{2},,h_{3},,h_{4},,h_{5},,h_{6},,h_{7},,h_{8},,h_{9} \right )^{T}\tag9
当有两个平面上的四对点

(xi,yi)

(

x

i

,

y

i

)

(x_{i},,y_{i})、

(ui,vi)

(

u

i

,

v

i

)

(u_{i},,v_{i}),

(i=1,2,3,4)

(

i

=

1

,

2

,

3

,

4

)

(i=1,2,3,4)时,即可得如式

(10)

(

10

)

(10)所示的方程组

Ah=0(10)

(10)

A

h

=

0

A\mathbf{h}=\mathbf{0}\tag{10}
其中

A=[X1Y1X2Y2X3Y3X4Y4]T(11)

(11)

A

=

[

X

1

Y

1

X

2

Y

2

X

3

Y

3

X

4

Y

4

]

T

A=\begin{bmatrix}
\mathbf{X_{1}} & \mathbf{Y_{1}} & \mathbf{X_{2}} & \mathbf{Y_{2}} & \mathbf{X_{3}} & \mathbf{Y_{3}}& \mathbf{X_{4}} & \mathbf{Y_{4}}
\end{bmatrix}^{T}\tag{11}
为了更直观,下面将

(11)

(

11

)

(11)式展开

⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢x10x20x30x40y10y20y30y40101010100x10x20x30x40y10y20y30y401010101−u1x1−v1x1−u2x2−v2x2−u3x3−v3x3−u4x4−v4x4−u1y1−v1y1−u2y2−v2y2−u3y3−v3y3−u4y4−v4y4−u1−v1−u2−v2−u3−v3−u4−v4⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢h1h2h3h4h5h6h7h8h9⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢00000000⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥(12)

(12)

[

x

1

y

1

1

0

0

0

u

1

x

1

u

1

y

1

u

1

0

0

0

x

1

y

1

1

v

1

x

1

v

1

y

1

v

1

x

2

y

2

1

0

0

0

u

2

x

2

u

2

y

2

u

2

0

0

0

x

2

y

2

1

v

2

x

2

v

2

y

2

v

2

x

3

y

3

1

0

0

0

u

3

x

3

u

3

y

3

u

3

0

0

0

x

3

y

3

1

v

3

x

3

v

3

y

3

v

3

x

4

y

4

1

0

0

0

u

4

x

4

u

4

y

4

u

4

0

0

0

x

4

y

4

1

v

4

x

4

v

4

y

4

v

4

]

[

h

1

h

2

h

3

h

4

h

5

h

6

h

7

h

8

h

9

]

=

[

0

0

0

0

0

0

0

0

]

\begin{bmatrix}
x_{1} & y_{1} & 1 & 0 & 0 & 0 & -u_{1}x_{1} & -u_{1}y_{1} & -u_{1}\
0 & 0 & 0 & x_{1} & y_{1} & 1 & -v_{1}x_{1} & -v_{1}y_{1} & -v_{1}\
x_{2} & y_{2} & 1 & 0 & 0 & 0 & -u_{2}x_{2} & -u_{2}y_{2} & -u_{2}\
0 & 0 & 0 & x_{2} & y_{2} & 1 & -v_{2}x_{2} & -v_{2}y_{2} & -v_{2}\
x_{3} & y_{3} & 1 & 0 & 0 & 0 & -u_{3}x_{3} & -u_{3}y_{3} & -u_{3}\
0 & 0 & 0 & x_{3} & y_{3} & 1 & -v_{3}x_{3} & -v_{3}y_{3} & -v_{3}\
x_{4} & y_{4} & 1 & 0 & 0 & 0 & -u_{4}x_{4} & -u_{4}y_{4} & -u_{4}\
0 & 0 & 0 & x_{4} & y_{4} & 1 & -v_{4}x_{4} & -v_{4}y_{4} & -v_{4}
\end{bmatrix}
\begin{bmatrix}
h_{1}\h_{2}\h_{3}\h_{4}\h_{5}\h_{6}\h_{7}\h_{8}\h_{9}
\end{bmatrix}
=\begin{bmatrix}
0\0\0\0\0\0\0\0
\end{bmatrix}\tag{12}
接下来的任务就是怎么解这个方程了,这个矩阵的解法一般使用奇异值分解。像

(12)

(

12

)

(12)式这样的方程我们称为齐次方程,与之对应的是非齐次方程,如

Ah=b(13)

(13)

A

h

=

b

A\mathbf{h}=\mathbf{b}\tag{13}
其中

b≠0

b

0

\mathbf{b}\neq \mathbf{0},将

(13)

(

13

)

(13)式与

(10)

(

10

)

(10)式对比就知道,它们的差别是“常数项”是否为零向量,所以我对“齐次方程”这个概念的理解是,方程只有因变量和自变量而没有常数项,例如

y=kx

y

=

k

x

y=kx和

f(x,y)=ax+by

f

(

x

,

y

)

=

a

x

b

y

f(x,,y)=ax+by和这种是齐次的,而

y=kx+b

y

=

k

x

b

y=kx+b和

f(x,y)=ax+by+c

f

(

x

,

y

)

=

a

x

b

y

c

f(x,,y)=ax+by+c是非齐次的。

像解

(13)

(

13

)

(13)式这样的非齐次矩阵方程,可以通过求矩阵

A

A

A的伪逆矩阵A−1A−1A^{-1},也就是

h=A−1Ah=A−1b(14)

(14)

h

=

A

1

A

h

=

A

1

b

\mathbf{h}=A{-1}A\mathbf{h}=A{-1}\mathbf{b}\tag{14}
伪逆矩阵是逆矩阵的广义形式,我们平时说的逆矩阵处理的对象是满秩的方阵,对一个任意非方阵矩阵

M

M

M,其大小为m×n(m≠n)m×n(m≠n)m \times n,(m\neq n),它的伪逆矩阵

M−1

M

1

M^{-1}大小为

n×m

n

×

m

n \times m,且

M−1M

M

1

M

M^{-1}M为一个

n×n

n

×

n

n \times n的单位矩阵。

如果解

(10)

(

10

)

(10)式也这么做,结果是

h=0

h

=

0

\mathbf{h}=\mathbf{0},但这显然不符合条件。于是我们要用到奇异值分解。

2.奇异值分解

在线性代数中,奇异值分解(SVD, singular-value decomposition)是实数或复数矩阵的因式分解,它是方阵的特征值分解在非方阵矩阵上的一般化。
  在介绍SVD之前先温习一下特征值分解的知识。对于一个
n×n

n

×

n

n \times n矩阵
M

M

M和一个nnn维非零向量
v

v

\mathbf{v},如果有

Mv=λv(15)

(15)

M

v

=

λ

v

M\mathbf{v}=\lambda \mathbf{v}\tag{15}
其中

λ

λ

\lambda为一标量,则

λ

λ

\lambda为矩阵

M

M

M的一个特征值,vv\mathbf{v}为

λ

λ

\lambda对应的特征向量。若

M

M

M有nnn个线性无关的特征向量

qi(i=1,2,…,n)

q

i

(

i

=

1

,

2

,

.

.

.

,

n

)

q_{i}(i=1,2,…,n)。这样,

M

M

M可以被分解为M=QΛQ−1(16)(16)M=QΛQ−1
M=Q\Lambda Q^{-1}\tag{16}
其中

Q

Q

Q是n×nn×nn \times n的方阵,

Λ

Λ

\Lambda为对角矩阵,其对角线上的元素即为

M

M

M的一系列特征值,即Λii=λiΛii=λi\Lambda_{ii}=\lambda_{i}。

而奇异值分解能分解非方阵矩阵,矩阵

A

A

A为一nnn行

p

p

p列矩阵(n×p)(n×p)(n \times p),则SVD可表述为如下式子

An×p=Un×nSn×pVTp×p(17)

(17)

A

n

×

p

=

U

n

×

n

S

n

×

p

V

p

×

p

T

A_{n\times p}=U_{n\times n}S_{n\times p}V_{p\times p}^{T}\tag{17}
其中

UTU=In×n(18)

(18)

U

T

U

=

I

n

×

n

U^{T}U=I_{n\times n}\tag{18}

VTV=Ip×p(19)

(19)

V

T

V

=

I

p

×

p

V^{T}V=I_{p\times p}\tag{19}
即矩阵

U

U

U、VVV均为正交矩阵。矩阵

U

U

U、VVV分别由

n

n

n个、ppp个互相正交的向量组成,在这里我们关心矩阵

V

V

V,有V=v1v2⋯vp(20)V=[v1v2⋯vp]
V=\begin{bmatrix}
\mathbf{v}_{1} & \mathbf{v}_{2} & \cdots & \mathbf{v}_{p}
\end{bmatrix}\tag{20}
其中对于任意的两个向量

vi

v

i

\mathbf{v}_{i}、

vj

v

j

\mathbf{v}_{j}的点积有,

{vi⋅vj=0,i≠jvi⋅vj≠0,i=j(21)

(21)

{

v

i

v

j

=

0

,

i

j

v

i

v

j

0

,

i

=

j

\left{\begin{matrix}
\mathbf{v}_{i}\cdot \mathbf{v}_{j}=0,,i\neq j\
\mathbf{v}_{i}\cdot \mathbf{v}_{j}\neq 0,,i=j
\end{matrix}\right.\tag{21}
而矩阵

S

S

S由一系列奇异值组成,除在SiiSiiS_{ii}上的奇异值外,其他值都为0,在本应用中被分解的是8行9列矩阵,正常情况下奇异值有8个(

σ1,σ2,⋯,σ8

σ

1

,

σ

2

,

,

σ

8

\sigma_{1},,\sigma_{2},,\cdots ,,\sigma_{8}),非正常情况后文有分析。那么我们在这里就可以说

(10)

(

10

)

(10)式的解

h

h

\mathbf{h}为:
**矩阵
A

A

A奇异值分解后VVV矩阵的最后一列向量**

vp

v

p

\mathbf{v}_{p}。

这个结论可以很简单地推导如下:

Avp=Un×n⎡⎣⎢⎢⎢⎢⎢σ10⋮00σ2⋮0⋯⋯⋱⋯00⋮σn00⋮0⎤⎦⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢vT1vT2⋮vTp⎤⎦⎥⎥⎥⎥⎥vp(22)

(22)

A

v

p

=

U

n

×

n

[

σ

1

0

0

0

0

σ

2

0

0

0

0

σ

n

0

]

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

λ

\lambda为一标量,则

λ

λ

\lambda为矩阵

M

M

M的一个特征值,vv\mathbf{v}为

λ

λ

\lambda对应的特征向量。若

M

M

M有nnn个线性无关的特征向量

qi(i=1,2,…,n)

q

i

(

i

=

1

,

2

,

.

.

.

,

n

)

q_{i}(i=1,2,…,n)。这样,

M

M

M可以被分解为M=QΛQ−1(16)(16)M=QΛQ−1
M=Q\Lambda Q^{-1}\tag{16}
其中

Q

Q

Q是n×nn×nn \times n的方阵,

Λ

Λ

\Lambda为对角矩阵,其对角线上的元素即为

M

M

M的一系列特征值,即Λii=λiΛii=λi\Lambda_{ii}=\lambda_{i}。

而奇异值分解能分解非方阵矩阵,矩阵

A

A

A为一nnn行

p

p

p列矩阵(n×p)(n×p)(n \times p),则SVD可表述为如下式子

An×p=Un×nSn×pVTp×p(17)

(17)

A

n

×

p

=

U

n

×

n

S

n

×

p

V

p

×

p

T

A_{n\times p}=U_{n\times n}S_{n\times p}V_{p\times p}^{T}\tag{17}
其中

UTU=In×n(18)

(18)

U

T

U

=

I

n

×

n

U^{T}U=I_{n\times n}\tag{18}

VTV=Ip×p(19)

(19)

V

T

V

=

I

p

×

p

V^{T}V=I_{p\times p}\tag{19}
即矩阵

U

U

U、VVV均为正交矩阵。矩阵

U

U

U、VVV分别由

n

n

n个、ppp个互相正交的向量组成,在这里我们关心矩阵

V

V

V,有V=v1v2⋯vp(20)V=[v1v2⋯vp]
V=\begin{bmatrix}
\mathbf{v}_{1} & \mathbf{v}_{2} & \cdots & \mathbf{v}_{p}
\end{bmatrix}\tag{20}
其中对于任意的两个向量

vi

v

i

\mathbf{v}_{i}、

vj

v

j

\mathbf{v}_{j}的点积有,

{vi⋅vj=0,i≠jvi⋅vj≠0,i=j(21)

(21)

{

v

i

v

j

=

0

,

i

j

v

i

v

j

0

,

i

=

j

\left{\begin{matrix}
\mathbf{v}_{i}\cdot \mathbf{v}_{j}=0,,i\neq j\
\mathbf{v}_{i}\cdot \mathbf{v}_{j}\neq 0,,i=j
\end{matrix}\right.\tag{21}
而矩阵

S

S

S由一系列奇异值组成,除在SiiSiiS_{ii}上的奇异值外,其他值都为0,在本应用中被分解的是8行9列矩阵,正常情况下奇异值有8个(

σ1,σ2,⋯,σ8

σ

1

,

σ

2

,

,

σ

8

\sigma_{1},,\sigma_{2},,\cdots ,,\sigma_{8}),非正常情况后文有分析。那么我们在这里就可以说

(10)

(

10

)

(10)式的解

h

h

\mathbf{h}为:
**矩阵
A

A

A奇异值分解后VVV矩阵的最后一列向量**

vp

v

p

\mathbf{v}_{p}。

这个结论可以很简单地推导如下:

Avp=Un×n⎡⎣⎢⎢⎢⎢⎢σ10⋮00σ2⋮0⋯⋯⋱⋯00⋮σn00⋮0⎤⎦⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢vT1vT2⋮vTp⎤⎦⎥⎥⎥⎥⎥vp(22)

(22)

A

v

p

=

U

n

×

n

[

σ

1

0

0

0

0

σ

2

0

0

0

0

σ

n

0

]

[外链图片转存中…(img-Lu6V4Hjb-1715891015723)]
[外链图片转存中…(img-V2Q6FmPu-1715891015723)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值