HALCON高級篇:3D相機標定(3

訪問標定結果

算子calibrate_cameras的主要結果由相機內參和每一張圖像標定板的位姿組成。算子將它們存儲在標定數據模型中,可以用算子get_calib_data來訪問它們。

HALCON高級篇:3D相機標定(3/3)

相機外參並不能直接被獲取,因為所需的世界座標系統的信息沒有存儲在標定數據模型中。然而,如果標定板被直接放置在測量平面上,其位姿可以被用來很容易的得到相機的外參,其是測量平面的位姿。

確定相機外參

相機外參描述了測量平面和相機的關係,例如如果僅僅外參是已知,就可能將相機座標系統(CCS)轉化到測量平面的座標系統,反之亦然。在HALCON中,測量平面被定義為世界座標系統(WCS)z=0的平面。

相機外參可以用不同的方法來確定:

  1. 利用從某一個標定圖像獲取的位姿,其中標定圖像中標定板被直接放置在測量平面上。在這種情況下,你就可以用算子get_calib_data來獲得其位姿。
  2. 通過一個標定板被直接放置在測量平面的額外圖像,將相機內參的確定從相機外參的確定分離出來。應用find_calib_object去提取標定標誌點和位姿。
  3. 自己去確定3D世界點和它們在圖像映射的對應關係,然後調用vector_to_pose。

如果你僅僅需要去精確地測量一個物體的尺寸,而不是在一個給定座標系統的物體的絕對位置,前兩種方法中一種就可以使用。

後兩種情況具有相機外參的決定不依賴相機內參的優勢。如果用單個相機在數個平面上做測量,或者不能在原地標定相機,這將是更加靈活和有用。

下面將對不同的情況做詳細的講解。

在標定圖像之一將標定板放置在測量平面上

第一種情況是一種最容易決定外參的方法。標定板必須直接放置在測量平面上,例如流水線。

因為通過算子calibrate_cameras,標定板的位姿可以確定下來,你可以通過算子get_calib_data簡單的訪問其位姿。這樣,用一個單一的標定步驟,內參和外參就能確定下來。這裡,在第一個標定圖像中標定板(標定物索引0)的位姿被確定。請注意的是每一個位姿是由7個值組成的。

HALCON高級篇:3D相機標定(3/3)

如果標定把是無限的薄的,結果位姿將是測量平面的真實位姿。因為真實的標定板有一個厚度d>0,標定板的位姿通過一個垂直於測量平面的量d的移動,例如沿著WCS的z軸。為了矯正它,我們需要沿著WCS的z軸去移動位姿d個單位。為了執行這個移動,算子set_origin_pose被利用:

HALCON高級篇:3D相機標定(3/3)

一般地,只要標定板和測量平面的空間關係是已知的,標定板在WCS中就可以任意地鎖定方向(如圖3所示)。然後,為了從標定板位姿中獲得測量平面的位姿,一個剛性轉換時必須的。在下面的例子中,標定板的位姿沿著y軸平移,接著繞著x軸旋轉。

HALCON高級篇:3D相機標定(3/3)

在一個單獨圖像中放置標定板在測量平面上

如果用HALCON標定板的優勢可以將相機內參和外參分離所具有的靈活性相結合,第二種相機外參確定的方法可以使用。

首先,相機按照標定步驟進行標定。這可以優先於相機在最終使用點安裝之前完成。

然後,在最終使用點安裝完相機以後,外參就可以被確定。僅僅需要做的就是取一張圖,圖中標定被直接放在了測量平面上。從這張圖中,外參就可以被確定下來。這裡,內參,標定板被直接放在測量平面上的圖像和標定標誌點的世界座標可從文件中讀取。

HALCON高級篇:3D相機標定(3/3)

然後,標定標誌點和標定板的位姿被提取:

HALCON高級篇:3D相機標定(3/3)

最後,考慮到標定板的厚度,被給相機位姿原點的值平移標定板厚度個單位。

HALCON高級篇:3D相機標定(3/3)


HALCON高級篇:3D相機標定(3/3)

圖3 標定板和測量平面的關係

需要注意的是,如果你想將標定步驟分為兩個部分來完成的話,相機的聚焦是很重要的,因為改變焦點就相當於改變焦距,其是內參的一部分。

利用已知的3D點和它們對應的圖像點

如果在給定的世界座標系統中執行測量是必要的,對於外參的確定,第三種情況就可以使用。這裡,你需要知道至少不再一條直線上3個點的3D世界座標,然後,你必須確定這些點映射後相對應的圖像座標。現在,算子vector_to_pose可以被用來確定相機的外參。

下面的程序作為一個確定外參的例子。

首先,三個點的世界座標被設定。

HALCON高級篇:3D相機標定(3/3)

然後,在圖像上這些點映射後的圖像座標被確定。在這個例子中,它們被很簡單的設定位一些接近的 值。實際上,它們應該以亞像素的精度確定下來,因為他們定義了相機外參。

HALCON高級篇:3D相機標定(3/3)

最後,算子vector_to_pose在已知對應關係和相機內參的情況下,被調用。

HALCON高級篇:3D相機標定(3/3)


從標定數據模型中刪除觀測圖

為了確定有關標定的觀測效果,或者從標定數據模型中移除壞質量的觀測數據,可以用算子remove_calib_data_observ刪除一個觀測圖。

HALCON高級篇:3D相機標定(3/3)

當再次執行相機標定的時候,需要注意標定錯誤的改變。

保存結果和銷燬標定數據模型

在訪問結果(或者用算子write_cam_par和write_pose來存儲它們),你可以藉助算子clear_calib_data銷燬標定數據模型。


分享到:


相關文章: