天天看點

OpenCV三維重建(3)--相機參數矩陣

OpenCV三維重建(3)--相機參數矩陣

    • 1、明确我能夠獲得那些東西?
    • 2、這些東西是否真的像書上說的那樣符合實際?
    • 3、添加一些幹擾,容錯性如何?
    • 4、小結

通過前面的相機标定,我們能夠獲得一些參數模型。但是這些相機的參數矩陣到底是什麼意思?怎樣才能夠判斷是否正确?誤差都會來自哪裡?這裡就必須要通過具體實驗來加深認識。采集帶相機參數的圖檔具有一定難度,幸好我之前有着不錯的積累—這裡一共有兩款資料集,一款來自《OpenCV計算機視覺程式設計攻略》第3版,家裡面好像還有一款微單可以進行采集,這樣我們可以進行交叉比對,看一看獲得的參數是否符合實際情況:

資料集1 來自《OpenCV計算機視覺程式設計攻略》第3版

OpenCV三維重建(3)--相機參數矩陣

資料集2來自家中“國民床單”

OpenCV三維重建(3)--相機參數矩陣

既然是做實驗,我想初步計劃一下。首先是要明确我能夠獲得那些東西?然後是比較這些東西是否真的像書上說的那樣符合實際?然後我會添加一些幹擾,看一看在有錯誤資料的情況,這些東西如何變化?最後是一個小結。

1、明确我能夠獲得那些東西?

通過前面的代碼,我們大概是準備獲得這樣的東西:

<?xml version="1.0"?>

<opencv_storage>

3

3

d 1.3589305122261344e+003 0. 5.7505355544729957e+002 0. 1.3565816672769690e+003 6.0423226535731465e+002 0. 0. 1. 1 14 d 9.5113243912423840e+001 1.4262144540955842e+003 5.2119492051277685e-003 2.8847713358900241e-003 1.2859720255043484e+002 9.5182218776001392e+001 1.4741397414456521e+003 6.8332022963370434e+002 0. 0. 0. 0. 0. 0. ____________________________________________________________________ 從結果上看,我将獲得這兩個矩陣。前面那個是相機内參矩陣,後面那個是外參數。那麼在一組圖檔中,内參肯定是不變的;後面外參肯定是變化的。但是這裡也有很多疑問。

OpenCV三維重建(3)--相機參數矩陣

那麼具體來看結果,對于第一組圖檔來說,我們獲得的結果為:

<?xml version="1.0"?>

<opencv_storage>

3

3

d 4.0927176647992695e+002 0. 2.3724719115090161e+002 0. 4.0870629848642727e+002 1.7128731207874495e+002 0. 0. 1. 1 14 d 1.8631118716959048e+001 -5.0639175384902096e+001 -5.2453807582033300e-003 -9.2620440694993842e-003 5.2367454865598742e+000 1.9002289932447418e+001 -4.8948501055979285e+001 -6.5115263545215851e-001 0. 0. 0. 0. 0. 0. _____________________________________________________________________ <?xml version="1.0"?>

<opencv_storage>

3

3

d 3.9136489375791234e+003 0. 2.6879080836687035e+003 0. 3.9811430968074164e+003 1.9454067884808153e+003 0. 0. 1. 1 14 d 2.5259392493942739e-002 -3.2418875955674309e-001 3.6376246418718853e-004 3.2526045276898190e-003 -8.1692713459156296e-002 2.5694845194956913e-002 4.7826938999253371e-001 -1.3315729771950511e+000 0. 0. 0. 0. 0. 0. ______________________________________________________________________

對于第二組圖檔來說:

2、這些東西是否真的像書上說的那樣符合實際?

對于第一套圖檔來說,看它的内參矩陣:

4.0927176647992695e+002 0. 2.3724719115090161e+002 0. 4.0870629848642727e+002 1.7128731207874495e+002 0. 0. 1. ______________________________________________________________________

解析一下,fx = fy = 409 ;U0=237 V0 = 171,這個是代碼計算值。從實際情況上來看,

标準中間為 268,178,這個和237,171是比較符合的。

OpenCV三維重建(3)--相機參數矩陣

對于其它資訊

OpenCV三維重建(3)--相機參數矩陣

這個焦距和我們計算出來的東西差距較大,如何比對?進一步研究,獲得這個相機的參數:

OpenCV三維重建(3)--相機參數矩陣

可以獲得,它的傳感器尺寸為23.5mm X 15.7mm,那麼像素寬度分别為0.0438(=23.5/536)和0.044,反過來算焦距為17.9,這個比較接近。

書中給出的資料肯定是自己選擇過的,那麼我們自己重新采集一套圖檔來說,那麼它的固有參數為:

OpenCV三維重建(3)--相機參數矩陣
OpenCV三維重建(3)--相機參數矩陣
OpenCV三維重建(3)--相機參數矩陣

獲得的結果:

3.9136489375791234e+003 0. 2.6879080836687035e+003 0. 3.9811430968074164e+003 1.9454067884808153e+003 0. 0. 1. ____________________________________________________________________

翻譯一下,fx = 3913.6 fy=3981.1 U0=2687.9 V0=1945.4

先看U V,5456/2 = 2728 3632/2=1816,這樣的話,差距在1.5%,這個差距看上去比較大,但是相對值比書中提供的資料要小。

而對于焦距來說,像素寬度分别為0.00425(=23.2/5456)和0.0386

算出來焦距為16.64和16.88,這個和16的差距也是比較合适的。

3、添加一些幹擾,容錯性如何?

最好的方法,是在有固定相機的情況下,重新采集一套圖檔,這個對于讀者來說,如果有興趣,可以來做。

4、小結

通過比較,可以發現一下幾個特點:

1、書本上采集的圖檔,其角度範圍更為廣泛。是以說書上的采集方法對于我們後面做實際采集有指導意義;

2、棋盤的大小和最後是否能夠産生良好結果關系不大,是以一個合适大小的棋盤就可以;

此外:

3、特别是對于視野比較廣的情況,應該優先想出高效解決方法。我認為視場越大,誤差越大;

4、對于大照片的處理,本身就是一個比較複雜的問題:因為像素比較高,是以處理起來比較慢;而又不能通過壓縮之類的方法進行預處理,是以會有比較多的問題。目前還有沒有很好解決方法;

此外,你還必須考慮标定的過程中失敗的情況;還必須考慮采用什麼模式能夠讓标定的效果最好。

感謝閱讀至此,希望有所幫助。

來自為知筆記(Wiz)

目前方向:圖像拼接融合、圖像識别 聯系方式:[email protected]

繼續閱讀