數據集1
來自《OpenCV計算機視覺編程攻略》第3版

數據集2
來自家中“國民床單”

1、明確我能夠獲得那些東西?
通過前面的代碼,我們大概是准備獲得這樣的東西:
<
?xml version
=
"1.0"
?
>
<opencv_storage
>
<Intrinsic type_id
=
"opencv-matrix"
>
<rows
>
3
<
/rows
>
<cols
>
3
<
/cols
>
<dt
>d
<
/dt
>
<data
>
1.
3589305122261344e
+
003
0.
5.
7505355544729957e
+
002
0.
1.
3565816672769690e
+
003
6.
0423226535731465e
+
002
0.
0.
1.
<
/data
>
<
/Intrinsic
>
<Distortion type_id
=
"opencv-matrix"
>
<rows
>
1
<
/rows
>
<cols
>
14
<
/cols
>
<dt
>d
<
/dt
>
<data
>
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.
<
/data
>
<
/Distortion
>
<
/opencv_storage
>
從結果上看,我將獲得這兩個矩陣。前面那個是相機內參矩陣,后面那個是外參數。那么在一組圖片中,內參肯定是不變的;后面外參肯定是變化的。但是這里也有很多疑問。

那么具體來看結果,
對於第一組圖片來說,我們獲得的結果為:
<
?xml version
=
"1.0"
?
>
<opencv_storage
>
<Intrinsic type_id
=
"opencv-matrix"
>
<rows
>
3
<
/rows
>
<cols
>
3
<
/cols
>
<dt
>d
<
/dt
>
<data
>
4.
0927176647992695e
+
002
0.
2.
3724719115090161e
+
002
0.
4.
0870629848642727e
+
002
1.
7128731207874495e
+
002
0.
0.
1.
<
/data
>
<
/Intrinsic
>
<Distortion type_id
=
"opencv-matrix"
>
<rows
>
1
<
/rows
>
<cols
>
14
<
/cols
>
<dt
>d
<
/dt
>
<data
>
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.
<
/data
>
<
/Distortion
>
<
/opencv_storage
>
<
?xml version
=
"1.0"
?
>
<opencv_storage
>
<Intrinsic type_id
=
"opencv-matrix"
>
<rows
>
3
<
/rows
>
<cols
>
3
<
/cols
>
<dt
>d
<
/dt
>
<data
>
3.
9136489375791234e
+
003
0.
2.
6879080836687035e
+
003
0.
3.
9811430968074164e
+
003
1.
9454067884808153e
+
003
0.
0.
1.
<
/data
>
<
/Intrinsic
>
<Distortion type_id
=
"opencv-matrix"
>
<rows
>
1
<
/rows
>
<cols
>
14
<
/cols
>
<dt
>d
<
/dt
>
<data
>
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.
<
/data
>
<
/Distortion
>
<
/opencv_storage
>
對於第二組圖片來說:
2、這些東西是否真的像書上說的那樣符合實際?
對於第一套圖片來說,看它的內參矩陣:
<data
>
4.
0927176647992695e
+
002
0.
2.
3724719115090161e
+
002
0.
4.
0870629848642727e
+
002
1.
7128731207874495e
+
002
0.
0.
1.
<
/data
>
解析一下,fx = fy = 409 ;
U0=237 V0 = 171,這個是代碼計算值。從實際情況上來看,

標准中間為 268,178,這個和237,171是比較符合的。
對於其它信息

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

可以獲得,它的傳感器尺寸為23.5mm X 15.7mm,那么像素寬度分別為0.0438(=23.5/536)和0.044,反過來算焦距為17.9,這個比較接近。
書中給出的資料肯定是自己選擇過的,那么我們自己重新采集一套
圖片來說,那么它的固有參數為:



獲得的結果:
<data
>
3.
9136489375791234e
+
003
0.
2.
6879080836687035e
+
003
0.
3.
9811430968074164e
+
003
1.
9454067884808153e
+
003
0.
0.
1.
<
/data
>
翻譯一下,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、對於大照片的處理,本身就是一個比較復雜的問題:因為像素比較高,所以處理起來比較慢;而又不能通過壓縮之類的方法進行預處理,所以會有比較多的問題。目前還有沒有很好解決方法;
此外,你還必須考慮標定的過程中失敗的情況;還必須考慮采用什么模式能夠讓標定的效果最好。
感謝閱讀至此,希望有所幫助。