单应矩阵公式推导及计算
溫馨提示:如遇公式錯誤,可在文末留言,歡迎指正。本文未經(jīng)允許禁止轉(zhuǎn)載。
? 單應(yīng)矩陣描述的是空間中同一平面上的三維點在兩張圖像中的對應(yīng)關(guān)系。這里需要強(qiáng)調(diào)的是同一平面。
? 單應(yīng)矩陣可以應(yīng)用在圖像矯正、圖像配準(zhǔn)拼接、視角轉(zhuǎn)換以及計算兩張圖像的相機(jī)運動(旋轉(zhuǎn)和平移)上。
下面我們推導(dǎo)一下單應(yīng)矩陣,本文講述了兩種推導(dǎo)方式。首先回憶一下相機(jī)模型矩陣:
? ?其中:
[R T]?是一個3x4的矩陣,Xw是一個4x1的矩陣,K是一個3x3的矩陣。
?
?
圖1 空間中同一點投影到兩圖像上
?
為了討論更為一般的情況,我們假設(shè)兩張圖片來自于兩個相機(jī)A、B(對應(yīng)著左右圖),這樣兩個相機(jī)的內(nèi)參矩陣是不同的,分別為Ka、Kb。世界坐標(biāo)系中的三維點到相機(jī)坐標(biāo)系轉(zhuǎn)換,對應(yīng)的旋轉(zhuǎn)、平移矩陣分別為:
這樣一來,我們就可以得到兩個相機(jī)模型矩陣。
?
將世界坐標(biāo)系中的點用非齊次形式(頭頂一飄~)表達(dá)為:
?
?
1. 推導(dǎo)一:
在相機(jī)坐標(biāo)系下,空間中的平面模型為
是在相機(jī)坐標(biāo)系下的非齊次坐標(biāo)。
?
圖2?相機(jī)看空間中的一個平面
?
接下來推導(dǎo)從左圖(相機(jī)A)到右圖(相機(jī)B)的映射矩陣,需要用到的式子先擺上(下標(biāo)中帶字母“ca”和“a”,對應(yīng)相機(jī)A)。
? ? ? ?是平面在相機(jī)A坐標(biāo)系下的法向量,d表示該平面到相機(jī)A的垂直距離,是相機(jī)A坐標(biāo)系下平面上的一點。
?
開啟推導(dǎo)模式:
? ? ? ? ?
??需要說明一下:
是上述平面在世界坐標(biāo)系中的法向量。
?
(旋轉(zhuǎn)矩陣R是正交矩陣,所以R的轉(zhuǎn)置就等于R的逆)
?
? ?至此,經(jīng)過上述推導(dǎo),兩張圖像中點的對應(yīng)關(guān)系我們就得到了。
如果把世界坐標(biāo)系和相機(jī)A坐標(biāo)系重合,那么
上式化簡為:
?
單應(yīng)矩陣
H是一個3x3的矩陣,可以看出單應(yīng)矩陣與兩個相機(jī)之間的相對運動以及所拍攝平面特性有關(guān)系。
?
2. 推導(dǎo)二:
??為了方便計算,假設(shè)所拍攝平面在世界坐標(biāo)系中位于Z=0上。
這樣Xw大小就由原來的4x1變成了3x1,旋轉(zhuǎn)矩陣R中第三列就可以消去,[R T]變成了3x3的矩陣。
3. 如何計算H:
?
為兩張圖像中匹配的點對(可以利用sift、surf等描述子匹配獲得),每一對匹配點,可以得到兩個方程。H矩陣中h9是尺度,所以一共有8個未知數(shù),則至少需要4對點就可以解出矩陣H。解H矩陣常用的一個方法是SVD分解,以后我們會講一下SVD分解。
?
這里給出MATLAB中求解H的代碼:
[U,S,V] =svd(A); H=V(:,end); H=reshape(H,3,3);至此,單應(yīng)矩陣的推導(dǎo)以及計算就講解完了。這里仍然需要強(qiáng)調(diào)的是:使用單應(yīng)矩陣,需要確保三維點在一個平面上。(當(dāng)然并不是必須在一個平面上,因為如果三維點距離相機(jī)比較遠(yuǎn),三維點之間的距離和其距離相機(jī)的距離相比就很小,那就可以認(rèn)為在一個平面上了。)
本文同步更新微信公眾號:
總結(jié)
以上是生活随笔為你收集整理的单应矩阵公式推导及计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java activiti jbpm_a
- 下一篇: java中想要保留2位小数_java使d