SVD 是個神奇的矩陣拆解, 應用價值遠大於 eigen vector
複習一下, 非正交的 eigen vector 並非落在橢圓的長短軸上 , 會很難聯想
而 SVD 解出的 u, v 保證是正交矩陣, 因為正交, 可直接代表轉換後橢圓的樣貌
可更直接的知道變換矩陣的對圖形的物理意義在哪
圖片來源 : 線代啟示錄
令 [u , Σ , vT] = svd(A)
如上圖, 2維向量用單位圓當例子, 可以得到三個訊息
1. 橢圓的長短軸位置在原本在 v1, v2 的向量角度上 (被撐大/縮小是在 v1 v2 位子上進行的)
2. 中間的 Σ (σ1 σ2 ... σn) 內容分別代表各邊的長度
3. 最後長短軸會旋轉到 u1, u2 的向量角度上
由上面可以理解, 當我們的應用是要找出變換後能讓輸出資訊最大最小的輸入, 變換矩陣對單位圓的響應就是上面提到的橢圓, 因此那個最長/最短的軸就是能讓輸出資訊最大或最小的向量位置, 如果可以知道那個極短軸的位置在哪, 並且從哪裡來. 就可以得到想要的答案.
當 eigen value 正交, SVD 的 u = v, 表示軸來源位置等於最後呈現的位置, 也就是可不經轉動之經過長短軸縮放產生該橢圓.
如果在乎的資訊是 " 是拿什麼位置來當軸的", 那就要看 v 的數值
如果在乎的資訊是 " 最後形狀的樣子", 那就要看 u 的數值
舉個例子, 希望由 SVD 求最佳解, 希望知道 σ1 ... σn 中最小值所對應的向量, 該向量為解, 此時在乎的是讓 σ 為最小的原本向量在哪, 而非 σ 為最小最後長怎樣, 因此選擇 v 來看.
另外一個例子,希望找出 epipolar 位置在哪, 此時在乎的是直線方程式分布的形狀, 不在乎這些線原本從哪來的, 則選擇 u 來看.
2014年8月29日 星期五
2014年8月18日 星期一
3D 到 2D 投影座標, 點, 線 與相機系統之對應關係
[前言]
再寫 OpenCV Calibration 之前, 須先將 2D 投影座標的系統描述一遍
在此僅針對二維的投影座標做解釋, 超過二維投影實在是超出正常人的想像空間, 不知道如何圖解了
當二維的座標, 經轉換後出現了位移的表現, 此時除了原本的[x, y]維度, 我們需給予一個新的維度 "1" 來表達位移的狀態, 也就是 [x, y, 1]. 然而位移的表現, 用矩陣運算表示為.
如果有一矩陣運算式為
該矩陣會使 "1" 的維度不等於 1, 這又該如何解釋? 這時已經不是能用 2 維上的位移來解釋了. 此時, 比較好的看法是, 將其看成在一個三維的空間, 投影到 z = 1 的二維平面上的投影座標.
其實, 任何用 [x, y, 1]T表現的座標都能用二維的投影座標 (原座標為三維) 來解釋, 例如上面的位移也是一種特殊的投影表現. 所有投影座標, 在經過運算後, 須將最後的 "1" 維度除掉, 讓 "1" 永遠是1, 這就是所謂的投影過程. 怎麼投影不是這邊要描述的重點, 這裡要看的是, 投影座標的點, 線怎麼來的 ? 以及任意的二維座標轉換物理意義 (數學是有 inverse 是為了強調是相機座標轉換, 非物體的變化)
上式也就是 2D 投影平面之間的線性轉換, 或者可以稱它為 Homography, 在運算上與應用上的好處是, 可以僅用已知的 2D 座標來運算不需真的知道3D座標, 但如果要了解他的物理意義, 還是透過回到 3D系統上再投影回平面, 會更好理解與解釋. 說穿了這樣的 2D 轉換, 其實只是對投影平面在 3D 的立體空間上的位置與型態做變化而已, 需注意, 僅投影平面有變化, 但無論如何, 光學中心是不能有任何的改變的! 因此我們可以將這個變化套用在實際的相機系統上.
投影系統變化帶給整個相機系統會是一個怎樣的變化, 物理意義該如何解釋?
在這之前先了解 2D 投影平面上的點與線怎麼來的.
[2D投影座標上的點]
在任何 3D 上的點, 透視投影到 z = 1 平面上的那一點, 即 2D 投影座標上的點
例如, (6,2,2) 會投影到 (3,1,1) 這個點, 也就是 (3,1) , 因投影的交會點在(0,0,0), 可以發現只要將 3D 點的 z 值除掉, 就會是 2D 投影點的答案了.
[2D投影座標上的線]
從國中還是國小數學, 我們知道2D的直線方程式為 ax + by + c= 0, 在此不再用多項式來表示, 而是用矩陣 [a, b, c] 來表示一條直線, 當 [a, b, c] 被定義為直線, 任何通過該直線的 (x,y)則必須符合下面的數學意義
這是什麼意思呢? 如果回到 3D 的座標來看, 任何點 [x, y, z] 與向量 [a, b, c] 內積為 0, 表示該點通過原點的向量與 [a, b, c] 垂直, 所有點通過原點與 [a, b, c] 垂直可組成一個面, 令所有點除 z = [x', y' , 1] 則是該面投影在(或切於) z = 1 的點, 這些在 z = 1 的點剛好就是一條線, 該線就是 [a, b ,c] 所表現的線. 而 [a, b, c] 其實等於該線的法向量.
[相機與矩陣]
相機的成像原理, 其實就是 3D 空間投影到 2D 空間的表現, 在假設拍攝的物件與環境都不變的情況下, 所有的數學運算, 將只是單純的相機座標轉換運算, 本文所描述的2D座標空間只是單純的相機在 z = 1 的投影座標下的(類比)空間, 並不包含從 z = 1 的投影空間轉換到實際 pixel 的(數位)影像空間.
對投影座標做運算, 等同於對 3D 座標做運算後再投影回去
上面兩式的差別只有輸入點在 [x y 1] 或是 [x y z] 上, 之後都必須投影回到 z=1 的平面, 也就是最後求出來的數值, 都必須除掉使它為 1 (若為 0 則為無窮遠)
但是這個假設不包含3D座標轉換有位移的情況
只有符合 Homography 的假設上面方程式關係才存在. (也就是只有共面才可能符合條件)
因此, 我們可以假設, 將相機的光學中心設在 3D 座標 (0, 0, 0) 的位置 , 這樣也才符合光學投影所有點都將穿過光學中心的過程.
另外, 相機無法在 3D 空間中進行位移的動作. 否則將無法單純利用投影向量的變化來描述所有可能性.
之前提到, 對投影平面直接進行轉換等同於對其 3D 轉換後投影, 通常把它想成直接在 3D 上進行座標轉換後再投影是最好理解的方式, 對 3D 轉換其實就是在對投影的那個面, 進行轉換, 因此整個不管是 2D 直接轉換的過程, 或是 3D 轉換再投影的過程, 都是在對投影平面進行轉換的動作. (需注意, 被攝物的座標是不會變動的, 變動的是相機的狀態, 當然, 如果要想成是被攝物在進行變化, 數學上也是說得過去, 但比較不符合事實)
相機在進行變換之前, 主宰原本相機的狀態有三個向量, 相機面對 [0,0,1]T = z 軸, sensor 水平方向平行於 [1,0,0]T = x 軸, sensor 垂直方向平行於[0,1,0]T = y 軸 , 物理上sensor / 底片的位置在於 z = -1 的地方, 所有光會通過孔徑 (0,0,0) 打再 sensor 上, 但為了方便繪圖與避免鏡像, 通常以背投影的方式令 sensor 在 z = 1 的平面上, 也就是鏡頭焦距固定為 1, 另外相機需符合針孔相機的原理. 而 sensor 大小對應到鏡頭的 FOV (視角) 來決定, 或是反過來說. 下圖為 y = 0 的切面來看這個 FOV = 90 的相機系統, 實際上物件是三維的.
以這 FOV = 90的相機來說, 其對應的 2D 座標, 最左邊 x = -1, 通過 z 軸的點 x = 0,最右邊 x = 1, 無論投影平面怎麼變化, 都是遵循這樣的規則
當像機經過變化, 令座標轉換後投影的公式為
主宰相機的三個向量將發生變化, 相機改面對 [r00,r10,r20]T向量, sensor 水平方向(左右)改平行於 [r01,r11,r21]T向量, sensor 垂直方向(上下)改平行於 [r02,r12,r22]T向量.
這三個向量所有的變化都是由兩種行為組合 (1) 縮放(振幅變化) (2) 旋轉(角度變化)
為了簡單化, 分別解說各別代表的物理意義.
[x y z 的縮放]
z 的縮放 :
下面中間有 inverse 的是具座標轉換物理意義的公式 , 右邊解完 inverse 是直接算式.
這裡使相機看的方向改為 [0,0,2]T, 這邊向量方向不變, 只有振幅放大2倍, 什麼意思呢? 也就是這個座標轉換將原本 z = 1 的投影平面變為 z = 2 平面, 使得投影平面與原點的距離多兩倍其餘狀態皆不變. 通俗的說就是焦距變大了, 相機 zoom in, 使畫面內容放大.
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 原本投影在 (1, 0) 的點, 變化後變為 (2, 0), 另外 FOV 也變小了.
x 的縮放 :
這裡使 sensor 水平方向改為 [1/2,0,0]T, 一樣, 向量的方向不變, 但縮小兩倍, 也就是原本 x = 0.5 的大小會被當做 1 來看, 會使物件原本 x 的大小放大兩倍,
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變 化, 原本投影在 x 的點, 變化後成像也是變為兩倍, 雖然從圖上較難看出. 這邊的解釋會與 z 方向改變的縮放有所不同, z 方向的向量縮放影響的是焦距大小, 此時 sensor 狀態是不變的, 而 x 方向縮放改變的是 sensor 的大小, 雖然這裡與數位化的像素轉換無關, 但用 pixel 的角度來解釋會比較容易, 可以解釋為再解析度相同的情況下, 表示一個 pixel 的單位寬度變窄, 整體的 FOV 也跟著變小.
y 的縮放 :
解釋同 x 的縮放. 但要補充的是, 這邊為什麼要將 z 的縮放與 x y 縮放用不同物理意義來解釋? 因為一針孔相機之焦距只能有一個, 若 x y 方向的縮放大小不同, 無法用焦距來解釋, 但卻可以很簡單的用 sensor pixel 單位長寬不一致的方向來解釋.
而 sensor pixel 長寬不一致的設計在一些特定的應用上是會故意這樣做的, 例如運用在 NTSC / PAL 的閉路系統的攝影機上, 為了方便符合類比信號規格會做非正方形的 pixel size.
但, 若 x, y 縮放一致, 例如 x , y 向量都縮小兩倍, 結果與 z 向量放大兩倍的成像結果將會一致.
然而實際的應用上, 相機通常都是相同的 sensor / lens 且 pixel 為正方形, 通常不太會去大幅度的改變縮放係數. 應用上會使用到的重點是在旋轉.
[x y z 的旋轉]
x-y 的旋轉與仿射 :
z 軸固定的情況下, x 或 y 軸角度有變化的物理意義是, 相機看的角度一樣, sensor 一樣垂直於相機看的角度, 但 sensor 本身會旋轉或歪斜.
當 [a b 0]T [c d 0]T當互相正交, 則表示變化後水平與垂直方向還是保持垂直狀態, 行為會是 sensor 旋轉, 若向量振福大小不等於一, 則有縮放. 在這裡假設振幅為1
一般來說會以 [cos(a) sin(a) 0]T [-sin(a) cos(a) 0]T呈現
如上圖, 是 z=1的剖面圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 是一個單純的旋轉.
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 是一種歪斜的表現.
如果 x y 軸變化後呈現非正交狀態, 表示sensor 平行方向與垂直方向呈現非 90 度的情況, 則表示有歪斜 (skew)產生.物理意義上, 歪斜表示 sensor 的製造過程中, 無論是 sensor 本身, 或 pixel 本身, 都不是做的正正方方的. 與 x y 振幅(長寬)互不相同不一樣的地方是, 正常不會有故意歪斜的設計存在. 所以歪斜本身通常是一種錯誤的型態.
x-z 的旋轉與仿射 :
分正交與非正交狀態.
正交狀態與前面所說的一樣, 單純是固定 y 軸的旋轉 , 物理意義是相機的仰角(y方向)不變, 而整體左右旋轉來觀看, 如下圖.
題外話, 這種行為通常與你手持相機隨移左右旋轉晃動去看有所不同, 因為手在旋轉的時候會動到光學中心, 產生位移.
而在非正交狀態下, 相機的水平平行方向將不等於相機看的方向, 也就是 sensor 中心點雖然一樣落在主要的光軸上, 但卻是擺斜的 , 這裡舉一個簡單的例子
在這個例子中, 只有 x 方向有變化其餘皆保持不變, 變化後的 x 軸 [1 0 0]T = [1 0 1/2]T
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 可以發現 sensor 水平平面與相機看的方向 (光學中軸)非垂直狀態, 此外這個例子變化後震幅並非保持在 1, 因此還會有上面縮放的特性.
這邊特別故意設計成水平方向旋轉的角度與上面正交的角度相同, 可以觀察這兩個的差異在哪.
看看另外一個例子
這個例子一樣是 x-z 歪斜, 但不同的是, sensor 水平方向不變, 但看的方向歪了
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 這個例子是一個很典型的例子, 看出來了嗎? sensor 只是進行了橫向的移動而以, 他其實就是單純的 x 方向位移, 也就是, 位移可以透過3D空間的變化來達成. 這裡可以發現, 改變後 z 方向的振幅變了, 但事實上, sensor 平面 (z = 1) 到 z = 0 平面距離沒有變化, 因此不會出現放大縮小的現象.
y-z 的旋轉與仿射 :
原理同 x - z, 只是左右方向的變化變成上下的變化而已.
理解2D投影變化的行為, 會對之後 Calibration 的行為有更好的理解.
再寫 OpenCV Calibration 之前, 須先將 2D 投影座標的系統描述一遍
在此僅針對二維的投影座標做解釋, 超過二維投影實在是超出正常人的想像空間, 不知道如何圖解了
當二維的座標, 經轉換後出現了位移的表現, 此時除了原本的[x, y]維度, 我們需給予一個新的維度 "1" 來表達位移的狀態, 也就是 [x, y, 1]. 然而位移的表現, 用矩陣運算表示為.
如果有一矩陣運算式為
該矩陣會使 "1" 的維度不等於 1, 這又該如何解釋? 這時已經不是能用 2 維上的位移來解釋了. 此時, 比較好的看法是, 將其看成在一個三維的空間, 投影到 z = 1 的二維平面上的投影座標.
其實, 任何用 [x, y, 1]T表現的座標都能用二維的投影座標 (原座標為三維) 來解釋, 例如上面的位移也是一種特殊的投影表現. 所有投影座標, 在經過運算後, 須將最後的 "1" 維度除掉, 讓 "1" 永遠是1, 這就是所謂的投影過程. 怎麼投影不是這邊要描述的重點, 這裡要看的是, 投影座標的點, 線怎麼來的 ? 以及任意的二維座標轉換物理意義 (數學是有 inverse 是為了強調是相機座標轉換, 非物體的變化)
上式也就是 2D 投影平面之間的線性轉換, 或者可以稱它為 Homography, 在運算上與應用上的好處是, 可以僅用已知的 2D 座標來運算不需真的知道3D座標, 但如果要了解他的物理意義, 還是透過回到 3D系統上再投影回平面, 會更好理解與解釋. 說穿了這樣的 2D 轉換, 其實只是對投影平面在 3D 的立體空間上的位置與型態做變化而已, 需注意, 僅投影平面有變化, 但無論如何, 光學中心是不能有任何的改變的! 因此我們可以將這個變化套用在實際的相機系統上.
投影系統變化帶給整個相機系統會是一個怎樣的變化, 物理意義該如何解釋?
在這之前先了解 2D 投影平面上的點與線怎麼來的.
[2D投影座標上的點]
在任何 3D 上的點, 透視投影到 z = 1 平面上的那一點, 即 2D 投影座標上的點
例如, (6,2,2) 會投影到 (3,1,1) 這個點, 也就是 (3,1) , 因投影的交會點在(0,0,0), 可以發現只要將 3D 點的 z 值除掉, 就會是 2D 投影點的答案了.
[2D投影座標上的線]
從國中還是國小數學, 我們知道2D的直線方程式為 ax + by + c= 0, 在此不再用多項式來表示, 而是用矩陣 [a, b, c] 來表示一條直線, 當 [a, b, c] 被定義為直線, 任何通過該直線的 (x,y)則必須符合下面的數學意義
這是什麼意思呢? 如果回到 3D 的座標來看, 任何點 [x, y, z] 與向量 [a, b, c] 內積為 0, 表示該點通過原點的向量與 [a, b, c] 垂直, 所有點通過原點與 [a, b, c] 垂直可組成一個面, 令所有點除 z = [x', y' , 1] 則是該面投影在(或切於) z = 1 的點, 這些在 z = 1 的點剛好就是一條線, 該線就是 [a, b ,c] 所表現的線. 而 [a, b, c] 其實等於該線的法向量.
[相機與矩陣]
相機的成像原理, 其實就是 3D 空間投影到 2D 空間的表現, 在假設拍攝的物件與環境都不變的情況下, 所有的數學運算, 將只是單純的相機座標轉換運算, 本文所描述的2D座標空間只是單純的相機在 z = 1 的投影座標下的(類比)空間, 並不包含從 z = 1 的投影空間轉換到實際 pixel 的(數位)影像空間.
對投影座標做運算, 等同於對 3D 座標做運算後再投影回去
上面兩式的差別只有輸入點在 [x y 1] 或是 [x y z] 上, 之後都必須投影回到 z=1 的平面, 也就是最後求出來的數值, 都必須除掉使它為 1 (若為 0 則為無窮遠)
但是這個假設不包含3D座標轉換有位移的情況
只有符合 Homography 的假設上面方程式關係才存在. (也就是只有共面才可能符合條件)
因此, 我們可以假設, 將相機的光學中心設在 3D 座標 (0, 0, 0) 的位置 , 這樣也才符合光學投影所有點都將穿過光學中心的過程.
另外, 相機無法在 3D 空間中進行位移的動作. 否則將無法單純利用投影向量的變化來描述所有可能性.
之前提到, 對投影平面直接進行轉換等同於對其 3D 轉換後投影, 通常把它想成直接在 3D 上進行座標轉換後再投影是最好理解的方式, 對 3D 轉換其實就是在對投影的那個面, 進行轉換, 因此整個不管是 2D 直接轉換的過程, 或是 3D 轉換再投影的過程, 都是在對投影平面進行轉換的動作. (需注意, 被攝物的座標是不會變動的, 變動的是相機的狀態, 當然, 如果要想成是被攝物在進行變化, 數學上也是說得過去, 但比較不符合事實)
相機在進行變換之前, 主宰原本相機的狀態有三個向量, 相機面對 [0,0,1]T = z 軸, sensor 水平方向平行於 [1,0,0]T = x 軸, sensor 垂直方向平行於[0,1,0]T = y 軸 , 物理上sensor / 底片的位置在於 z = -1 的地方, 所有光會通過孔徑 (0,0,0) 打再 sensor 上, 但為了方便繪圖與避免鏡像, 通常以背投影的方式令 sensor 在 z = 1 的平面上, 也就是鏡頭焦距固定為 1, 另外相機需符合針孔相機的原理. 而 sensor 大小對應到鏡頭的 FOV (視角) 來決定, 或是反過來說. 下圖為 y = 0 的切面來看這個 FOV = 90 的相機系統, 實際上物件是三維的.
以這 FOV = 90的相機來說, 其對應的 2D 座標, 最左邊 x = -1, 通過 z 軸的點 x = 0,最右邊 x = 1, 無論投影平面怎麼變化, 都是遵循這樣的規則
當像機經過變化, 令座標轉換後投影的公式為
主宰相機的三個向量將發生變化, 相機改面對 [r00,r10,r20]T向量, sensor 水平方向(左右)改平行於 [r01,r11,r21]T向量, sensor 垂直方向(上下)改平行於 [r02,r12,r22]T向量.
這三個向量所有的變化都是由兩種行為組合 (1) 縮放(振幅變化) (2) 旋轉(角度變化)
為了簡單化, 分別解說各別代表的物理意義.
[x y z 的縮放]
z 的縮放 :
下面中間有 inverse 的是具座標轉換物理意義的公式 , 右邊解完 inverse 是直接算式.
這裡使相機看的方向改為 [0,0,2]T, 這邊向量方向不變, 只有振幅放大2倍, 什麼意思呢? 也就是這個座標轉換將原本 z = 1 的投影平面變為 z = 2 平面, 使得投影平面與原點的距離多兩倍其餘狀態皆不變. 通俗的說就是焦距變大了, 相機 zoom in, 使畫面內容放大.
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 原本投影在 (1, 0) 的點, 變化後變為 (2, 0), 另外 FOV 也變小了.
x 的縮放 :
這裡使 sensor 水平方向改為 [1/2,0,0]T, 一樣, 向量的方向不變, 但縮小兩倍, 也就是原本 x = 0.5 的大小會被當做 1 來看, 會使物件原本 x 的大小放大兩倍,
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變 化, 原本投影在 x 的點, 變化後成像也是變為兩倍, 雖然從圖上較難看出. 這邊的解釋會與 z 方向改變的縮放有所不同, z 方向的向量縮放影響的是焦距大小, 此時 sensor 狀態是不變的, 而 x 方向縮放改變的是 sensor 的大小, 雖然這裡與數位化的像素轉換無關, 但用 pixel 的角度來解釋會比較容易, 可以解釋為再解析度相同的情況下, 表示一個 pixel 的單位寬度變窄, 整體的 FOV 也跟著變小.
y 的縮放 :
解釋同 x 的縮放. 但要補充的是, 這邊為什麼要將 z 的縮放與 x y 縮放用不同物理意義來解釋? 因為一針孔相機之焦距只能有一個, 若 x y 方向的縮放大小不同, 無法用焦距來解釋, 但卻可以很簡單的用 sensor pixel 單位長寬不一致的方向來解釋.
而 sensor pixel 長寬不一致的設計在一些特定的應用上是會故意這樣做的, 例如運用在 NTSC / PAL 的閉路系統的攝影機上, 為了方便符合類比信號規格會做非正方形的 pixel size.
但, 若 x, y 縮放一致, 例如 x , y 向量都縮小兩倍, 結果與 z 向量放大兩倍的成像結果將會一致.
然而實際的應用上, 相機通常都是相同的 sensor / lens 且 pixel 為正方形, 通常不太會去大幅度的改變縮放係數. 應用上會使用到的重點是在旋轉.
[x y z 的旋轉]
x-y 的旋轉與仿射 :
z 軸固定的情況下, x 或 y 軸角度有變化的物理意義是, 相機看的角度一樣, sensor 一樣垂直於相機看的角度, 但 sensor 本身會旋轉或歪斜.
當 [a b 0]T [c d 0]T當互相正交, 則表示變化後水平與垂直方向還是保持垂直狀態, 行為會是 sensor 旋轉, 若向量振福大小不等於一, 則有縮放. 在這裡假設振幅為1
一般來說會以 [cos(a) sin(a) 0]T [-sin(a) cos(a) 0]T呈現
如上圖, 是 z=1的剖面圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 是一個單純的旋轉.
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 是一種歪斜的表現.
如果 x y 軸變化後呈現非正交狀態, 表示sensor 平行方向與垂直方向呈現非 90 度的情況, 則表示有歪斜 (skew)產生.物理意義上, 歪斜表示 sensor 的製造過程中, 無論是 sensor 本身, 或 pixel 本身, 都不是做的正正方方的. 與 x y 振幅(長寬)互不相同不一樣的地方是, 正常不會有故意歪斜的設計存在. 所以歪斜本身通常是一種錯誤的型態.
x-z 的旋轉與仿射 :
分正交與非正交狀態.
正交狀態與前面所說的一樣, 單純是固定 y 軸的旋轉 , 物理意義是相機的仰角(y方向)不變, 而整體左右旋轉來觀看, 如下圖.
題外話, 這種行為通常與你手持相機隨移左右旋轉晃動去看有所不同, 因為手在旋轉的時候會動到光學中心, 產生位移.
而在非正交狀態下, 相機的水平平行方向將不等於相機看的方向, 也就是 sensor 中心點雖然一樣落在主要的光軸上, 但卻是擺斜的 , 這裡舉一個簡單的例子
在這個例子中, 只有 x 方向有變化其餘皆保持不變, 變化後的 x 軸 [1 0 0]T = [1 0 1/2]T
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 可以發現 sensor 水平平面與相機看的方向 (光學中軸)非垂直狀態, 此外這個例子變化後震幅並非保持在 1, 因此還會有上面縮放的特性.
這邊特別故意設計成水平方向旋轉的角度與上面正交的角度相同, 可以觀察這兩個的差異在哪.
看看另外一個例子
這個例子一樣是 x-z 歪斜, 但不同的是, sensor 水平方向不變, 但看的方向歪了
如上圖, 灰色為原本預設的相機型態, 黑色為座標轉換後的變化, 這個例子是一個很典型的例子, 看出來了嗎? sensor 只是進行了橫向的移動而以, 他其實就是單純的 x 方向位移, 也就是, 位移可以透過3D空間的變化來達成. 這裡可以發現, 改變後 z 方向的振幅變了, 但事實上, sensor 平面 (z = 1) 到 z = 0 平面距離沒有變化, 因此不會出現放大縮小的現象.
y-z 的旋轉與仿射 :
原理同 x - z, 只是左右方向的變化變成上下的變化而已.
理解2D投影變化的行為, 會對之後 Calibration 的行為有更好的理解.
訂閱:
文章 (Atom)