halcon 旋转_HALCON高级篇:3D相机标定(2/3)
在多位姿上觀察標定物
標定的主要輸入數據是所謂的觀察。為此,標定物在不同的位姿被放置。對于每一個位姿,相機獲取一張圖像。在這張圖像上,標定物的標志點被提取,還有他們的(像素)坐標,連同相機的索引,標定物,標定物的位姿,包含響應標志點的索引,都被存儲在標定數據模型中。
如果你使用標準的HALCON標定板,你可以用算子find_calib_object去提取坐標,其將自動存儲獲得的信息到標定數據模型,包括標志點的坐標和標志點對應的列表。
如果你用的是自己的標定物,你必須提取其標志點和確定其對應關系,然后用set_calib_data_observ_points將信息存儲在標定數據模型中。
獲取標定圖像的規則
如果你想獲得準確的結果,請準照下面的規則:
- 用一個干凈的標定板
- 用多個圖像覆蓋整個視野,例如在視野所有區域至少放置標定一次
- 變換標定板的方向,包含標定板繞著x軸和y軸旋轉,這樣標定圖案的透視畸變是清晰可見的。沒有一些傾斜的標定板,焦距是不能夠被合理的計算出來(接近45度的傾斜角度是被推薦的)
- 對于六角形排列的標定板,至少使用6張圖像,矩形排列的標定板10到15張
- 對于矩形排列的標定板,用一個背景比標定板更暗的光照
- 標定把亮的部分的灰度值至少為100
- 標定板的亮暗對比應該超過100
- 用一個使標定板均勻的光照
- 圖像不能過曝(圖像亮的部分應該嚴格低于255)
- 圓的直徑應該至少20個像素
- 圓的直徑的像素至少20個像素
- 對于標定板大小的選取,六角形排列的標定板應該覆蓋整個圖像,對于矩形排列的標定板,至少覆蓋整個圖像的1/4
- 六角形排列的標定板,至少一個定位圖像在圖像中是完全可見的。如果至少兩個定位圖是可見的,可能去檢測是否標定板是反射的。對于矩形排列的標定把,標定應該在圖像中完全可見的。
- 圖像應該盡可能的包含一點噪聲
- 圖像應該被嚴格聚焦,例如在物體之間的過度應該被清晰的界定開。
需要注意的是,一個好的標定結果僅僅是在相機視野中標定標志點均勻分布的情況下才能獲得。你可以想象一下相對于視野的3D空間的一部分作為一個標定體積,如圖2所示,這里展示了,當從不同角度看時,標定板的兩個位姿和它們標定標志點的位置。可以看到,例如從面1看,更大的部分沒有被標志點所覆蓋。為了獲得更標志點的均勻分布,進而得到一個好的標定結果,你必須在你其他的圖像中放置標定板,進而對于整個視角,標定容積空的部分被最小化。注意的是,當有一個非常小的標定板(相比于視野而言),這就意味著比推薦的更多的標定圖像數量被需要使用。
如果一張圖像被用于標定過程或者如果標定板的方向在不同的標定圖像不發生變化,就不可能很好的確定焦距和相機的位姿;在這種情況下,僅僅聚焦之間的比率和標定板和相機之間的距離被確定下來。然而,在標定板平面進行世界坐標的測量是可能,但是不可能去讓相機參數去適應在另一個面上進行測量,例如標定板被放置的面。
圖2: 標定容積的查看:(左)具有兩個標定位姿的標定容積和(右)當不同角度看時,標定標志點相對應的分布。對于一個好的標定結果,沒有標定標志點的區域(尤其從面1視角則更大)必須通過更多標定板位姿的謹慎選擇達到最小化。
結果世界坐標的精度,除了在圖像中的測量精度外,非常依賴被用來標定進程中所用的圖像的數量。越多圖像(具有更大不同的標定板位姿)被使用,更精確的結果將被獲取。
提取HALCON標定板上的標志點
算子find_calib_object尋找標定板,決定了標定標志點的圖像坐標,并具有很高的精度,最后將結果存儲在標定數據模型中。
需要注意的是find_caltab和find_marks_and_pose僅僅被用于矩形排列的標定板。還有,它們需要復雜的參數調整。相反的是,可以用于所有標準的HALCON標定板,自動選擇合適的參數,因此更容易去使用。
限制標定到特定的參數
如果某相機參數已知了,你可以用算子set_calib_data從標定中排除它們,類似的,你可以限制標定到某些參數。
執行標定
在準備了標定數據模型以后,可以通過調用calibrate_cameras來執行標定,用標定數據模型作為輸入:
作為一個直接結果是,僅僅是標定錯誤被返回。你可以用算子get_calib_data來更進一步的去分析標定結果的質量。
主要的標定結果,例如相機的內參,被存儲在標定數據模型中。
總結
以上是生活随笔為你收集整理的halcon 旋转_HALCON高级篇:3D相机标定(2/3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 003007属于什么板块
- 下一篇: python爬取有道词典_利用Pytho