我在視頻(或圖像)中有4個(gè)共面點(diǎn),代表一個(gè)四邊形(不一定是正方形或矩形),我希望能夠在它們的上方顯示一個(gè)虛擬立方體,立方體的角恰好位于這些角上視頻四分之一。由于這些點(diǎn)是共面的,因此我可以計(jì)算單位正方形的角(即[0,0] [0,1] [1,0] [1,1])與四邊形的視頻坐標(biāo)之間的單應(yīng)性。通過(guò)這種單應(yīng)性,我應(yīng)該能夠計(jì)算出正確的攝像機(jī)姿勢(shì),即[R | t],其中R是3x3旋轉(zhuǎn)矩陣,t是3x1平移矢量,以便虛擬立方體位于視頻四邊形上。我已經(jīng)閱讀了許多解決方案(其中一些在SO上)并嘗試實(shí)現(xiàn)它們,但是它們似乎僅在某些“簡(jiǎn)單”情況下才有效(例如,當(dāng)視頻四邊形為正方形時(shí)),但在大多數(shù)情況下不起作用。這是我嘗試過(guò)的方法(大多數(shù)方法基于相同的原理,僅翻譯的計(jì)算略有不同)。令K為相機(jī)的本征矩陣,H為單應(yīng)性。我們計(jì)算:A = K-1 * H假設(shè)a1,a2,a3是A的列向量,r1,r2,r3是旋轉(zhuǎn)矩陣R的列向量。r1 = a1 / ||a1||r2 = a2 / ||a2||r3 = r1 x r2t = a3 / sqrt(||a1||*||a2||)問(wèn)題是這在大多數(shù)情況下不起作用。為了檢查我的結(jié)果,我將R和t與通過(guò)OpenCV的solvePnP方法獲得的結(jié)果進(jìn)行了比較(使用以下3D點(diǎn)[0,0,0] [0,1,0] [1,0,0] [1,1 ,0])。由于我以相同的方式顯示多維數(shù)據(jù)集,因此我注意到在每種情況下,solvePnP均提供正確的結(jié)果,而從單應(yīng)性圖中獲得的姿勢(shì)大多是錯(cuò)誤的。從理論上講,由于我的點(diǎn)是共面的,因此可以從單應(yīng)性計(jì)算姿勢(shì),但是我找不到從H計(jì)算姿勢(shì)的正確方法。關(guān)于我在做什么錯(cuò)的任何見(jiàn)解?嘗試@Jav_Rock的方法后進(jìn)行編輯您好Jav_Rock,非常感謝您的回答,我嘗試了您的方法(以及許多其他方法),這似乎或多或少都可以。但是,在基于4個(gè)共面點(diǎn)計(jì)算姿勢(shì)時(shí),我仍然碰巧遇到一些問(wèn)題。為了檢查結(jié)果,我將其與solvePnP的結(jié)果進(jìn)行比較(由于采用了迭代重投影誤差最小化方法,因此效果會(huì)更好)。這是一個(gè)例子:黃色立方體:解決PNP黑色立方體:Jav_Rock的技術(shù)青色(和紫色)多維數(shù)據(jù)集:其他一些技術(shù)得出的結(jié)果完全相同如您所見(jiàn),盡管矢量看起來(lái)是正交的,但黑色立方體或多或少是可以的,但似乎比例不高。EDIT2:我對(duì)v3進(jìn)行了歸一化(為了增強(qiáng)正交性),它似乎也解決了一些問(wèn)題。
基于4個(gè)共面點(diǎn)的單應(yīng)矩陣計(jì)算相機(jī)姿態(tài)
慕村9548890
2019-10-25 15:11:51