使用OpenCV
可以通過2d-3d點關係獲得圖像或相機位置的前視平行視圖嗎?是否有可能通過2d-3d點關係獲得圖像或攝像機位置的平視圖?
爲此我有內在和外在參數。我還有一組控制點(位於一個平面上)的三維座標圖像(關係2d-3d)。
事實上,我需要相機的位置和方向,但如果我可以將圖像轉換爲平行視角,並不難找到它。
如果OpenCV無法做到,那麼其他庫可以解決這個問題嗎?
使用OpenCV
可以通過2d-3d點關係獲得圖像或相機位置的前視平行視圖嗎?是否有可能通過2d-3d點關係獲得圖像或攝像機位置的平視圖?
爲此我有內在和外在參數。我還有一組控制點(位於一個平面上)的三維座標圖像(關係2d-3d)。
事實上,我需要相機的位置和方向,但如果我可以將圖像轉換爲平行視角,並不難找到它。
如果OpenCV無法做到,那麼其他庫可以解決這個問題嗎?
解決方案基於OpenCV的文檔中的公式Camera Calibration and 3D Reconstruction
讓我們考慮數字形式無失真係數(與矩陣形式對比度)。
我們有u
和v
。
這很容易計算x'
和y'
。
但是x
和y
無法計算,因爲我們可以選擇任何非零值z
。
3d中的線對應於2d圖像中的一個點。
爲了解決這個問題,我們採取兩點爲z=1
和z=2
。 然後我們在3d空間中找到2個點,指定線(x1,y1,z1)
和(x2,y2,z2)
。
然後我們就可以申請R
-1到(x1,y1,z1)
和(x2,y2,z2)
導致兩點(X1, Y1, Z1)
和(X1, Y1, Z1)
確定線。由於我們的控制點位於一個平面(爲簡單起見,假設平面爲Z = 0),我們可以找到相應的點爲3d的點X
和點號Y
。
將mm
的歸一化應用於像素後,我們獲得了平行前後的圖像。
(如果我們輸入圖像失真,我們應該首先undistort吧)
順便說一句,是不是寫這無關與問題的意見好主意嗎? – sergtk 2012-01-12 16:22:52
如果你解決了這個問題,但沒有具體的答案,你應該**自己添加**正確的答案,並接受它讓別人知道如何處理這個問題。這是適當的協議。 – karlphillip 2012-01-12 16:24:11
好吧,謝謝,將來會記住這一點(無論如何,我嘗試添加我的正確答案) – sergtk 2012-01-12 16:25:46