halcon 旋转_HALCON高级篇:3D相机标定(3/3)
訪問標定結果
算子calibrate_cameras的主要結果由相機內參和每一張圖像標定板的位姿組成。算子將它們存儲在標定數據模型中,可以用算子get_calib_data來訪問它們。
相機外參并不能直接被獲取,因為所需的世界坐標系統的信息沒有存儲在標定數據模型中。然而,如果標定板被直接放置在測量平面上,其位姿可以被用來很容易的得到相機的外參,其是測量平面的位姿。
確定相機外參
相機外參描述了測量平面和相機的關系,例如如果僅僅外參是已知,就可能將相機坐標系統(CCS)轉化到測量平面的坐標系統,反之亦然。在HALCON中,測量平面被定義為世界坐標系統(WCS)z=0的平面。
相機外參可以用不同的方法來確定:
如果你僅僅需要去精確地測量一個物體的尺寸,而不是在一個給定坐標系統的物體的絕對位置,前兩種方法中一種就可以使用。
后兩種情況具有相機外參的決定不依賴相機內參的優勢。如果用單個相機在數個平面上做測量,或者不能在原地標定相機,這將是更加靈活和有用。
下面將對不同的情況做詳細的講解。
在標定圖像之一將標定板放置在測量平面上
第一種情況是一種最容易決定外參的方法。標定板必須直接放置在測量平面上,例如流水線。
因為通過算子calibrate_cameras,標定板的位姿可以確定下來,你可以通過算子get_calib_data簡單的訪問其位姿。這樣,用一個單一的標定步驟,內參和外參就能確定下來。這里,在第一個標定圖像中標定板(標定物索引0)的位姿被確定。請注意的是每一個位姿是由7個值組成的。
如果標定把是無限的薄的,結果位姿將是測量平面的真實位姿。因為真實的標定板有一個厚度d>0,標定板的位姿通過一個垂直于測量平面的量d的移動,例如沿著WCS的z軸。為了矯正它,我們需要沿著WCS的z軸去移動位姿d個單位。為了執行這個移動,算子set_origin_pose被利用:
一般地,只要標定板和測量平面的空間關系是已知的,標定板在WCS中就可以任意地鎖定方向(如圖3所示)。然后,為了從標定板位姿中獲得測量平面的位姿,一個剛性轉換時必須的。在下面的例子中,標定板的位姿沿著y軸平移,接著繞著x軸旋轉。
在一個單獨圖像中放置標定板在測量平面上
如果用HALCON標定板的優勢可以將相機內參和外參分離所具有的靈活性相結合,第二種相機外參確定的方法可以使用。
首先,相機按照標定步驟進行標定。這可以優先于相機在最終使用點安裝之前完成。
然后,在最終使用點安裝完相機以后,外參就可以被確定。僅僅需要做的就是取一張圖,圖中標定被直接放在了測量平面上。從這張圖中,外參就可以被確定下來。這里,內參,標定板被直接放在測量平面上的圖像和標定標志點的世界坐標可從文件中讀取。
然后,標定標志點和標定板的位姿被提取:
最后,考慮到標定板的厚度,被給相機位姿原點的值平移標定板厚度個單位。
圖3 標定板和測量平面的關系
需要注意的是,如果你想將標定步驟分為兩個部分來完成的話,相機的聚焦是很重要的,因為改變焦點就相當于改變焦距,其是內參的一部分。
利用已知的3D點和它們對應的圖像點
如果在給定的世界坐標系統中執行測量是必要的,對于外參的確定,第三種情況就可以使用。這里,你需要知道至少不再一條直線上3個點的3D世界坐標,然后,你必須確定這些點映射后相對應的圖像坐標。現在,算子vector_to_pose可以被用來確定相機的外參。
下面的程序作為一個確定外參的例子。
首先,三個點的世界坐標被設定。
然后,在圖像上這些點映射后的圖像坐標被確定。在這個例子中,它們被很簡單的設定位一些接近的 值。實際上,它們應該以亞像素的精度確定下來,因為他們定義了相機外參。
最后,算子vector_to_pose在已知對應關系和相機內參的情況下,被調用。
從標定數據模型中刪除觀測圖
為了確定有關標定的觀測效果,或者從標定數據模型中移除壞質量的觀測數據,可以用算子remove_calib_data_observ刪除一個觀測圖。
當再次執行相機標定的時候,需要注意標定錯誤的改變。
保存結果和銷毀標定數據模型
在訪問結果(或者用算子write_cam_par和write_pose來存儲它們),你可以借助算子clear_calib_data銷毀標定數據模型。
總結
以上是生活随笔為你收集整理的halcon 旋转_HALCON高级篇:3D相机标定(3/3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 堆排序时间复杂度
- 下一篇: 1017 A除以B (20分)