ROS攝像機的標定

2021-07-11 03:27:14 字數 3524 閱讀 8492

本文主要為ros camera_calibration 單目相機標定教程的翻譯

原文:僅供英文苦手的同學參考使用

1.1.編譯

執行以下指令

$ rosdep install camera_calibration
$ rosmake camera_calibration

1.2.訂閱攝像頭資訊

使用

$ rostopic list
來查閱當前發布的topic資訊,請確認topic的列表中存在

/camera/camera_info

/camera/image_raw

如果不存在,請檢查你的攝像頭驅動是否正確安裝

tip:如果當前電腦連線了多個攝像頭,或者你使用了自己編寫的一些攝像頭驅動,顯示的資訊可能會有一些不同

2.1.執行結點

輸入

$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera
來執行標定結點的python指令碼,其中

–size 8x6 為當前標定板的大小

–square 0.108為每個棋盤格的邊長

根據標定板的不同,可以按照需求更改這兩個引數

image:=/camera/image_raw標定當前訂閱影象**自名為/camera/image_raw的topic

camera:=/camera為攝像機名

之後,將會出現如下圖所示的ui

如果沒有出現如圖所示的ui,請使用

--no-service-check
來檢查服務結點是否工作

如果沒有看到如圖所示的彩色點,請確認–size引數是否正確,尤其注意是否將size設定為了棋盤格數而非其標定角點的數目

2.1.1多個標定板

從damondback版本開始,ros就支援使用多個標定板來進行標定了,如果你使用多個標定板進行標定,請輸入複數個–size和–square引數來說明各個標定板的大小

2.2.移動標定板

為了達到良好的標定效果,你需要在攝像機周圍移動標定板,並完成以下基本需求:

2.3取得標定結果

完成標定之後,你可以使用ui的滾動條來改變矯正後影象的尺寸,0.0表示//todo

d =  [-0.33758562758914146, 0.11161239414304096, -0.00021819272592442094, -3.029195446330518e-05]

k = [430.21554970319971, 0.0, 306.6913434743704, 0.0, 430.53169252696676, 227.22480030078816, 0.0, 0.0, 1.0]

r = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]

p = [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]

# ost version 5.0 parameters

[image]

width

640height

480[narrow_stereo/left]

camera matrix

430.215550 0.000000 306.691343

0.000000 430.531693 227.224800

0.000000 0.000000 1.000000

distortion

-0.337586 0.111612 -0.000218 -0.000030 0.0000

rectification

1.000000 0.000000 0.000000

0.000000 1.000000 0.000000

0.000000 0.000000 1.000000

projection

1.000000 0.000000 0.000000 0.000000

0.000000 1.000000 0.000000 0.000000

0.000000 0.000000 1.000000 0.000000

使用camera_calibration_parsers來建立乙個標定引數的yaml檔案

執行 $ rosrun camera_calibration_parsers convert in-file out-file

完成yaml轉換

ros中的camera_calibration包,其**實現主要使用了opencv中的calibration模組

一般來說,它包含以下內容

image_width: 2448

image_height: 2050

camera_name: prosilica

camera_matrix:

rows: 3

cols: 3

data: [4827.94, 0, 1223.5, 0, 4835.62, 1024.5, 0, 0, 1]

distortion_model: plumb_bob

distortion_coefficients:

rows: 1

cols: 5

data: [-0.41527, 0.31874, -0.00197, 0.00071, 0]

rectification_matrix:

rows: 3

cols: 3

data: [1, 0, 0, 0, 1, 0, 0, 0, 1]

projection_matrix:

rows: 3

cols: 4

data: [4827.94, 0, 1223.5, 0, 0, 4835.62, 1024.5, 0, 0, 0, 1, 0]

image_width、image_height代表的長寬

camera_name為攝像頭名

camera_matrix規定了攝像頭的內部引數矩陣

distortion_model指定了畸變模型

distortion_coefficients指定畸變模型的係數

rectification_matrix為矯正矩陣,一般為單位陣

projection_matrix為外部世界座標到像平面的投影矩陣

攝像機標定

利用攝像機所拍攝到的影象來還原空間中的物體。在這裡,不妨假設攝像機所拍攝到的影象與三維空間中的物體之間存在以下一種簡單的線性關係 像 m 物 這裡,矩陣m可以看成是攝像機成像的幾何模型。m中的引數就是攝像機引數。通常,這些引數是要通過實驗與計算來得到的。這個求解引數的過程就稱為攝像機標定。中文名 攝...

攝像機標定

攝像機鏡頭的畸變 由於攝像機光學系統並不是精確地按理想化的小孔成像原理工作,存在有透鏡畸 變,物體點在攝像機成像面上實際所成的像與理想成像之間存在有光學畸變誤差。主要的畸變誤差分為三類 徑向畸變 偏心畸變和薄稜鏡畸變。第一類只產生徑向 位置的偏差,後兩類則既產生徑向偏差,又產生切向偏差,下圖2 為無...

MFC OPENCV攝像機標定

在我的實驗專案中,我採用介於傳統標定和自標定之間的張正友棋盤格追蹤標定,該標定方法易於操作,標定精度高,還有一點opencv中的標定演算法也採用張正友標定法。在實驗專案開始之前,我看了 計算機視覺 馬頌德,張正友這本書,還看了張正友的棋盤標定 文 英文不好懂 理論知識就足以。接下來,我用matlab...