如何編寫高精度的相機標定程式?

熟悉機器視覺的朋友肯定都接觸過

相機標定

,目前有各種各樣的途徑來完成相機標定,其中開源的有

opencv和matlab

;商業軟體有

VisionPro,Halcon

。opencv和matlab中比較常用的標定圖案是

棋盤格標定板

,Halcon中使用的是

網格圓

,其中由於

圓形圖案的提取精度高於棋盤格

,因此,許多高精度的相機標定軟體都是使用的是圓/圓環作為標定圖案。因此,

如何使用圓形圖案標定板搭建自己的高精度標定程式呢

前提條件

要想搭建好基於圓形圖案的相機標定程式,必須具有以下兩個條件:

•高精度的特徵提取方法;•最佳化相機內外參的標定框架。

首先,講一下第二點,關於相機標定框架,大家肯定首先想到的是張正友標定方法(非常正確)。該標定框架目前已經非常成熟,被廣泛應用於各種領域。 其次,如何獲取高精度的特徵提取方法呢? 對於圓形標定板,在經過相機的透視投影后將會變成橢圓,因此我們需要的是高精度的橢圓檢測和擬合方法。自己從頭開始寫?NO,NO,NO!!!如果要自己寫,那我這邊文章就沒有寫的意義了。

搭建高精度相機標定

在Halcon中,存在高精度的邊緣檢測方法和橢圓擬合算子,見下圖:

如何編寫高精度的相機標定程式?

Halcon中檢測橢圓特徵中心的演算法流程

1)利用標定板的黑色邊界框定位標定板區域;

如何編寫高精度的相機標定程式?

2)在標定板區域提取畫素級邊緣;

如何編寫高精度的相機標定程式?

3)使用輪廓圓度和長度篩選輪廓,最終得到所有正確的橢圓輪廓; 4)對於每個篩選過的輪廓進行亞畫素邊緣提取。

如何編寫高精度的相機標定程式?

最重要的一點是,Halcon雖然是商業軟體,但是它每個月提供試用許可證,因此你不需要破解也可以使用它,唯一的缺點是每個月要更新許可證。

因此,我的想法是:

使用Halcon中的特徵提取運算元來進行高精度的圓形標定板特徵提取,使用opencv中的張正友標定框架來進行相機標定。

以下為構建的相機標定軟體:

如何編寫高精度的相機標定程式?

如何編寫高精度的相機標定程式?

以下為標定結果:

如何編寫高精度的相機標定程式?

重投影誤差為0.023pixel,相比於棋盤格的標定誤差,是不是提升了很多呢。

如何編寫高精度的相機標定程式?