計算機視覺的數學基礎

本文轉載高博士的博客
主要介紹了在計算機視覺中關於3D變換矩陣的數學方法。

  1. 旋轉矩陣是一種3×3的正交矩陣,
    這裏寫圖片描述
    這裏R爲3D的旋轉矩陣,同樣的,t爲3D的平移矢量。
    由於3D旋轉都可以歸結成按照某個單位向量n進行大小爲θ的旋轉。所以,已知某個旋轉時,可以推導出對應的旋轉矩陣。該過程由羅德里格斯公式表明,由於過程比較複雜,我們在此不作贅述,只給出轉換的結果: 
    這裏寫圖片描述
    這裏這裏寫圖片描述 公式雖然較爲複雜,但實際寫成程序後,只需知道旋轉方向和角度後即可完成計算。另一件有趣的事是,如果用
    這裏寫圖片描述
    表示與n對應的一個反對稱矩陣,那麼有:
    這裏寫圖片描述 (李代數會對後面的指數形式做出解釋)
    根據此式,我們也可以從任意給定的旋轉矩陣,求出對應的轉軸與轉角。關於轉角θ,我們對上式兩邊求矩陣的跡,可得:
    這裏寫圖片描述
    可得 這裏寫圖片描述
    關於轉軸n,由於旋轉軸上的向量在旋轉後不發生改變,說明
    這裏寫圖片描述
    因此,只要求此方程的解向量即可。這也說明n是R特徵值爲1的一個特徵向量。
    總之,讀者應當明白在3D時,旋轉和平移仍可用轉移矩陣T來描述,其結構也與2D類似。而T4×4構成了三維歐氏變換羣SE(3)。注意到T雖然有16個變量,但真正的自由度只有6個,其中3個旋轉,3個位移。
    歐拉角是一種廣爲使用的姿態描述方式,以直觀見長。在最常用的歐拉角表達方式中,我們把旋轉分解成沿三個軸轉動的量:滾轉角-俯仰角-偏航角(roll-pitch-yaw)。它的好處是十分的直觀,且只有三個參數描述。缺點是會碰到著名的萬向鎖問題:在俯仰爲±90∘時,表達某個姿態的形式不唯一。此外,它也不易於插值和迭代。一般不怎麼用,只有在驗證結果是否正確時,方便使用。

  2. 四元數
    相比歐拉角,四元數(Quaternion)則是一種緊湊、易於迭代、又不會出現奇異值的表示方法。它在程序中廣爲使用,例如ROS和幾個著名的SLAM公開數據集、g2o等程序都使用四元數記錄機器人的姿態。
    四元數僅是3D姿態的一種表達方式,我們用一個單位四元數表達原本用旋轉矩陣表示的三維旋轉。這樣做一個直接的好處是省空間。一個旋轉陣有9個分量,但只有三個自由度。那麼,能不能用三個數來描述呢?可以是可以的,但不可避免會出現奇異的情況,歐拉角就是一個例子。而四元數,比三維向量多了一個分量,從而可以無奇異地表示各種姿態。
    四元數是Hamilton找到的一種擴展的複數。一個四元數擁有一個實部和三個虛部(故事上說他原先找了很久帶兩個虛部的,結果怎麼也找不到,最後豁然開朗找到了三虛部的四元數):
    這裏寫圖片描述
    其中i,j,k爲四元數的三個虛部。這三個虛部滿足關係式:
    這裏寫圖片描述
    由於它的這種特殊表示形式,有時人們也用一個標量和一個向量來表達四元數:
    這裏寫圖片描述
    這裏,標量s稱爲四元數的實部,而向量v稱爲它的虛部。如果一個四元數虛部爲0,稱之爲實四元數。反之,若它的實部爲0,稱之爲虛四元數。該定義和複數是相似的。
    四元數可以表示三維空間中任意一個旋轉。與旋轉矩陣中類似,我們仍假設某個旋轉是繞單位向量這裏寫圖片描述 進行了角度爲θ的旋轉,那麼這個旋轉的四元數形式爲:
    這裏寫圖片描述
    事實上,這還是一個模長爲1的四元數,稱爲單位四元數。反之,我們亦可通過任意一個長度爲1的四元數,計算對應旋轉軸與夾角:
    這裏寫圖片描述
    若某個四元數長度不爲1,我們可以通過歸一化將它轉換爲一個模長爲1的四元數。對旋轉角的四元數形式的θ加上2π,我們得到一個相同的旋轉,但此時對應的四元數變成了−q。因此,在四元數中,任意的旋轉都可以由兩個互爲相反數的四元數表示。同理,取θ爲0,則得到一個沒有任何旋轉的四元數:
    這裏寫圖片描述
    四元數和通常複數一樣,可以進行一系列的運算。常見的有四則運算、內積、求逆、共軛、求指數/對數等等。表示姿態時,它還可以進行插值。
    3D空間也可以用單位四元數表示旋轉。假設一個空間三維點v=[x,y,z]∈R3 ,以及一個由旋轉軸和夾角n,θ指定的旋轉,首先,我們把三維空間點用一個虛四元數來描述:
    這裏寫圖片描述
    然後,參照旋轉角的四元數表示,用另一個四元數q表示這個旋轉:
    這裏寫圖片描述
    那麼,旋轉後的點p′p′即可表示爲這樣的乘積:
    這裏寫圖片描述
    可以驗證,計算結果的實部爲這裏寫圖片描述,故計算結果爲純虛四元數。其虛部的三個分量表示旋轉後3D點的座標。
    由於任意單位四元數都可表示爲一個3D旋轉,即SO(3)中的元素,我們可以找到一個旋轉矩陣與之對應。最簡單的方式是由四元數q解出旋轉角θ和旋轉軸n,但那樣要計算一個arccos函數,代價較大。實際上這個計算是可以通過一定的計算技巧繞過的。爲省略篇幅,我們直接給出四元數到旋轉矩陣的轉換方式。
    設四元數q=q0+q1i+q2j+q3k,對應的旋轉矩陣R爲:
    這裏寫圖片描述
    反之,由旋轉矩陣到四元數的轉換如下。假設矩陣爲R={mij},i,j∈[1,2,3],其對應的四元數q由下式給出:
    這裏寫圖片描述

  3. 其他幾種變換
    1). 相似變換比歐氏變換多了一個自由度,7個自由度,它允許物體進行自由地縮放。
    這裏寫圖片描述
      注意到旋轉部分多了一個縮放因子s,它在x,y,z三個座標上形成均勻的縮放。類似的,相似變換的乘法也構成羣,稱爲Sim(3)。由於含有縮放,相似變換不再保持圖形的面積不變。
    2). 仿射變換的矩陣形式如下:
    這裏寫圖片描述
      與歐氏變換不同的是,仿射變換隻要求A是一個可逆矩陣,而不必是正交矩陣。在仿射變換下,直線的夾角會發生改變,但平行性質不變。這即是說,仿射變換把平行四邊形變爲平行四邊形。有12個自由度。平行行和體積比不變。
    3). 射影變換是最一般的變換,它的矩陣形式爲:
    這裏寫圖片描述
      它左上角爲可逆矩陣A,右上爲平移t,左下縮放aT。由於採用齊座標,當v≠0時,我們可以對整個矩陣除以v得到一個右下角爲1的矩陣; 否則,則得到右下角爲0的矩陣。因此,這個矩陣在2D中一共有8個自由度,而在3D中一共有15個自由度,是現在提到的變換中最爲一般的。接觸平面的相交和相切。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章