作者asdfg1597860 (Jay)
看板C_and_CPP
標題[問題] 電腦視覺問題
時間Mon Sep 14 23:31:40 2020
開發平台(Platform): (Ex: Win10, Linux, ...)
win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
vs2019
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
Eigen
問題(Question):
各位前輩好
我想詢問關於電腦視覺的問題
如果我有一個旋轉+平移矩陣組合而成的轉換矩陣(Transformation Matrix)
也就是相機外參數矩陣(可以得知世界座標在相機座標的位置,旋轉量)
此時我可以透過這個轉換矩陣,推導出逆轉換矩陣,
而這個逆轉換矩陣,可以得到相機在世界座標的位置,及旋轉量
問題1 : 如果我有一個物體沿世界座標Z軸移動10cm,我想利用上面已知的轉換矩陣與逆
轉換矩陣,推導出屬於這個位置的轉換矩陣,是否有可能呢?
目前我的做法是
先將0,0,20轉換到相機座標(將0,020乘上轉換矩陣中旋轉矩陣的部分)
再將此平移量加到原本的轉換矩陣中平移矩陣的部分
組合而成的轉換矩陣就是0,0,20 與相機的轉換矩陣
如果有錯誤的地方再麻煩各位前輩糾正
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
補充說明(Supplement):
這是我目前使用到的公式
https://imgur.com/a/x6kgqPJ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.142.197.184 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1600097502.A.1B3.html
1F:推 s4300026: prob_solve? 09/15 08:26
2F:噓 cia1099: 老實說我看不太懂你的問題,相機外參就是世界座標轉到相 09/15 08:43
3F:→ cia1099: 機座標,這沒問題,你要直接取逆不是不能,但取逆要旋轉 09/15 08:43
4F:→ cia1099: 矩陣和平移相量分開作,因為外參矩陣是3x4的,沒有矩陣 09/15 08:43
5F:→ cia1099: 逆可以算不是方陣的矩陣,除非你用se3求逆才有辦法直接 09/15 08:43
6F:→ cia1099: 算逆乘法 09/15 08:43
7F:噓 cia1099: 你擴展成4x4還是和外參定義有差,平移運算不能直接這樣 09/15 08:48
8F:→ cia1099: 求逆,這違反矩陣的rank,平移不能保這4x4是full rank 09/15 08:48
9F:噓 cia1099: 抱歉上面的full rank講錯了,是說你的inv(T)算出來也是 09/15 09:12
10F:→ cia1099: 畸形,不滿足旋轉矩陣的constrain R^T*R=I,所以別直接 09/15 09:12
11F:→ cia1099: 對T求逆 09/15 09:12
12F:推 cart0909: 什麼是那個位置的轉換矩陣?你是想問那個點在相機坐標系 09/15 11:17
13F:→ cart0909: 下的座標嗎? 因為轉換矩陣是用來描述兩個坐標系的關係( 09/15 11:17
14F:→ cart0909: SE(3) group) ,還是你物體本身帶有座標系? 09/15 11:17
謝謝前輩的回覆
因為小弟最近才接觸到3D空間轉換等問題,觀念上可能還需加強
我目前認知是4*4的轉換矩陣 ,為齊次座標的轉換
目前我做的操作如下
1.將旋轉矩陣(3x3) 與 平移矩陣(3x1) 組合成[R|t](4x4) 最後(3,0)~(3,3)的值為0,0,0,1
這裡與兩位前輩提到的se3 類似(不過我不確定物理意義是否相同,我需要在消化學習這部分)
2.將此4x4的轉換矩陣做逆矩陣
3.分開來算旋轉矩陣(3x3)與平移矩陣(3x1),新的旋轉矩陣=旋轉矩陣的逆矩陣
新的平移矩陣 = -(新的旋轉矩陣) * 平移矩陣
將新的旋轉矩陣R'與新的平移矩陣T' 組合成[R'|T'](4x4) 最後(3,0)~(3,3)的值為0,0,0,1
此時會發現 3 與 2 求出來的逆轉換矩陣相同
所以我想透過這關係 求出在世界座標往Z軸位移20cm後 與相機的轉換矩陣
小弟如果描述或觀念不清楚的地方再請前輩指正
※ 編輯: asdfg1597860 (220.142.197.184 臺灣), 09/15/2020 21:42:37
15F:→ cart0909: 1是這樣寫沒錯 R只要滿足R*R^T=I 且 det(R)=1 就是rotat 09/16 23:31
16F:→ cart0909: ion matrix( SO(3) group ). 跟translation組成你寫的 09/16 23:31
17F:→ cart0909: 形式就是SE(3)其中一種表示方式了。 09/16 23:31
18F:→ cart0909: 2跟3 不多補充。 09/16 23:31
19F:推 cart0909: 再來你的問題要考慮那個object只是點還是帶走座標系。 09/16 23:34
20F:→ cart0909: 如果只是三維點x3Dw (描述在world frame)下,因為你有R 09/16 23:34
21F:→ cart0909: cw, tcw。就直接轉到camera frame就行了 x3Dc=Rcw*x3Dw+ 09/16 23:34
22F:→ cart0909: tcw 09/16 23:34
23F:推 cart0909: 如果是有座標系且知道Two轉換矩陣(object to world)。 09/16 23:36
24F:→ cart0909: 則object to camera的Tco=Tcw*Two 09/16 23:36
25F:→ asdfg1597860: 謝謝前輩的指導 09/17 23:29
26F:推 CoNsTaR: cia 怎麼那麼氣 XD 09/18 08:07
27F:→ CoNsTaR: 幫補 09/18 08:08
28F:推 purefalse: 邊氣邊教也是很好心! 09/18 08:25