MATLAB相機標定的使用並匯出XML檔案

2021-08-13 04:50:22 字數 2923 閱讀 7786

matlab的相機標定工具cameracalibrator位於computer vision toolbox,在命令列輸入cameracalibrator,並回車即可啟動gui介面,視覺化做得很友好,而且要比opencv中的相機標定準確度要高,執行速度要快(自己體會),下面介紹一下如何使用,以及如何將標定好的引數匯出為xml檔案,以供opencv讀入。

匯出xml檔案

列印一種黑白棋盤影象,在matlab中的幫助文件中已經為我們準備好了乙個pdf檔案(matlab安裝目錄\matlab\r201xa(b)\help\toolbox\vision\examples\checkerboardpattern.pdf),這是一張黑白棋盤影象,我們找到它,列印即可。

步驟:

上面是一張截圖,右側還可以將每一張對應的相機外參以三維立體圖的形式展現。

通過編寫matlab函式向相機標定的內參和畸變引數儲存為opencv可以讀取的xml檔案

function

writexml

(cameraparams,file)

%writexml(cameraparams,file)

%功能:將相機校正的引數儲存為xml檔案

%輸入:

%cameraparams:相機校正資料結構

%file:xml檔名

%說明在xml檔案是由一層層的節點組成的。

%首先建立父節點 fathernode,

%然後建立子節點 childnode=docnode.createelement(childnodename),

docnode = com.

mathworks.

xml.

xmlutils.createdocument('opencv_storage'); %建立xml檔案物件

docrootnode = docnode.getdocumentelement; %獲取根節點

intrinsicmatrix = (cameraparams.intrinsicmatrix)'; %相機內參矩陣

radialdistortion = cameraparams.radialdistortion; %相機徑向畸變引數向量1*3

tangentialdistortion =cameraparams.tangentialdistortion; %相機切向畸變向量1*2

distortion = [radialdistortion(1:2),tangentialdistortion,radialdistortion(3)]; %構成opencv中的畸變係數向量[k1,k2,p1,p2,k3]

camera_matrix = docnode.createelement('camera-matrix'); %建立mat節點

camera_matrix.setattribute('type_id','opencv-matrix'); %設定mat節點屬性

rows = docnode.createelement('rows'); %建立行節點

cols = docnode.createelement('cols');

dt = docnode.createelement('dt');

data = docnode.createelement('data');

fori=1:3

forj=1:3

endenddistortion = docnode.createelement('distortion');

distortion.setattribute('type_id','opencv-matrix');

rows = docnode.createelement('rows');

cols = docnode.createelement('cols');

dt = docnode.createelement('dt');

data = docnode.createelement('data');

fori=1:5

endxmlfilename = file;

xmlwrite(xmlfilename,docnode);

end

在命令列輸入:

writexml(cameraparams,'cameraparams.xml');
就完成了將相機內參和畸變引數儲存問xml檔案。

以下是匯出到xml檔案內容:

<?xml version="1.0" encoding="utf-8"?>

type_id="opencv-matrix">

3rows>

3cols>

ddt>

3099.7082447931371000 0.0000000000000000 1077.7535540640906000

0.0000000000000000 3086.4434775466948000 1826.5450377846478000

0.0000000000000000 0.0000000000000000 1.0000000000000000

data>

camera-matrix>

type_id="opencv-matrix">

5rows>

1cols>

ddt>

-0.0890744873306951 5.1317176243308209 -0.0051019418392772 -0.0021081150992697 -39.0645994879151530 data>

distortion>

opencv_storage>

上面的函式只匯出了相機內參和畸變引數,其它引數沒有匯出。

經過測試,可以從opencv中使用filestorage讀取。

MATLAB相機標定

標定流程 1 採集標定板影象 平面標定板 10張左右 2 讀入影象 3 提取每幅影象的角點,這一步有點麻煩,每次都要標註。4 標定 5 顯示重投影誤差影象,儲存畸變校正影象,分析誤差等。opencv雖然可以做相機標定,但是不好繪製重投影誤差圖,尤其在寫文章這一方面,還是matlab來做比較方便,可以...

matlab雙目相機標定校正 工業相機雙目標定

為了得到中物體的深度資訊,引入雙目視覺,雙目標定在的基礎上,標定出左右攝像機座標系之間的相對關係。若對單目標定不了解,請先食用 林青春 工業相機單目標定 zhuanlan.zhihu.com 所涉及的專業名詞有對極幾何,本徵矩陣,基礎矩陣。雙目相機基於對極幾何的理論,本徵矩陣e包含在物理空間兩個攝像...

相機標定(1) 初識相機標定 標定的含義,意義

1 相機標定含義 解決什麼是相機標定 在影象測量過程以及機器視覺應用中,為確定空間物體表面某點的三維幾何位置與其在影象中對應點之間的相互關係,必須建立相機成像的幾何模型,這些幾何模型引數就是相機引數。在大多數條件下這些引數必須通過實驗與計算才能得到,這個求解引數的過程就稱之為相機標定 或攝像機標定 ...