[英]rotation and translation matrix from homography opencv
我正在Java中的android應用程序上工作,我使用findHomography()用opencv計算了單應性,我如何找到包含通過單應性旋轉和平移的相機姿勢矩陣
Mat homography = Calib3d.findHomography(ReferencePoints2, ReferencePoints1,0,Calib3d.RANSAC);
您需要知道相機的固有參數才能做到這一點。
考慮z = 0平面。 重點
X=(x,y,0,1)'
投影到圖像為
p=P*X.
現在使用分解
P=K[R t],
其中K是校准矩陣,[R t]是外部參數。 由於z = 0,R的第三列向量乘以零。 現在,我們可以刪除第三列以獲得
p=K*[r1 r2 t]*(x,y,1)=H*(x,y,1),
其中H是平面單應性。
您已經根據已知點計算了H。 現在可以恢復R的第一和第二列以及向量t
[r1 r2 t]=inv(K)*H.
確保r1和r2是單位長度,然后t是正確的轉換向量。 因為R是正交的,所以可以恢復R的第三列向量,例如使用叉積。
r3=cross(r1,r2).
由於H是度量值,因此您計算出的r1和r2不精確。 您可以使用SVD獲得最接近測量值的旋轉矩陣。 然后您可以組成一個投影矩陣
P=K[r1 r2 r3 t]
會根據同構的2D坐標系在坐標系中投影任何3D點。
這是一些課程材料,描述了這種情況。
https://www.dropbox.com/s/qkulg4j64lyn0qa/2018_proj_geo_for_cv_projcv_assignment.pdf?dl=0
這是一個相關的問題。 基於4個共面點的單應矩陣計算相機姿態
正如@nbsrujan(感謝)指出的那樣,對於使用OpenCV的用戶,有一個函數可以根據內部函數將單應性分解為平移和旋轉矩陣。
OpenCV的一個功能,它可以分解單應以平移和旋轉矩陣。 但是,我們必須從此函數返回的可能矩陣的數組中選擇正確的平移和旋轉矩陣對。
法線向量是第一個攝像機幀中的表面法線。 如果您知道相機在初始幀中的旋轉角度,則可以用來從可能性列表中濾除正確的平移和旋轉對。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.