如何編寫高精度的相機標定程式?
如何編寫高精度的相機標定程式?
熟悉機器視覺的朋友肯定都接觸過
相機標定
,目前有各種各樣的途徑來完成相機標定,其中開源的有
opencv和matlab
;商業軟體有
VisionPro,Halcon
。opencv和matlab中比較常用的標定圖案是
棋盤格標定板
,Halcon中使用的是
網格圓
,其中由於
圓形圖案的提取精度高於棋盤格
,因此,許多高精度的相機標定軟體都是使用的是圓/圓環作為標定圖案。因此,
如何使用圓形圖案標定板搭建自己的高精度標定程式呢
?
前提條件
要想搭建好基於圓形圖案的相機標定程式,必須具有以下兩個條件:
•高精度的特徵提取方法;•最佳化相機內外參的標定框架。
首先,講一下第二點,關於相機標定框架,大家肯定首先想到的是張正友標定方法(非常正確)。該標定框架目前已經非常成熟,被廣泛應用於各種領域。 其次,如何獲取高精度的特徵提取方法呢? 對於圓形標定板,在經過相機的透視投影后將會變成橢圓,因此我們需要的是高精度的橢圓檢測和擬合方法。自己從頭開始寫?NO,NO,NO!!!如果要自己寫,那我這邊文章就沒有寫的意義了。
搭建高精度相機標定
在Halcon中,存在高精度的邊緣檢測方法和橢圓擬合算子,見下圖:
•
Halcon中檢測橢圓特徵中心的演算法流程
1)利用標定板的黑色邊界框定位標定板區域;
2)在標定板區域提取畫素級邊緣;
3)使用輪廓圓度和長度篩選輪廓,最終得到所有正確的橢圓輪廓; 4)對於每個篩選過的輪廓進行亞畫素邊緣提取。
最重要的一點是,Halcon雖然是商業軟體,但是它每個月提供試用許可證,因此你不需要破解也可以使用它,唯一的缺點是每個月要更新許可證。
因此,我的想法是:
使用Halcon中的特徵提取運算元來進行高精度的圓形標定板特徵提取,使用opencv中的張正友標定框架來進行相機標定。
以下為構建的相機標定軟體:
以下為標定結果:
重投影誤差為0.023pixel,相比於棋盤格的標定誤差,是不是提升了很多呢。