-
摄像机标定工具箱
1.1
Matlab
摄像机标定工具箱
工具
箱下载:
/bouguetj/calib_doc/download/
说明文档:
/bouguetj/calib_doc/
p>
安装:
将下载的工具箱文件
toolbox
_
解压缩,
将目录
toolbox_c
alib
拷贝到
Matlab
的目录下
。
采集图像:
采集的图像统一命名后
,
拷贝到
toolbox_calib
目录中。
命名规则为基本名和
编号,基本名在前,后面直接跟着
数字编号。编号最多为
3
位十进制数字。
1.1.1
标定模型
内参数标定采用的模型如式
(1-1)
所示,<
/p>
Brown
畸变模型式
(1-2)
所示。
?
u
?
?
k
x
?
v
?
?
?
0
?
?
?
?
?
1
?
?
?
?
0<
/p>
k
s
k
y
0
u
0
?
?
x
c
/
z
c
?
?
x
c
1
?
?
y
/
z
?<
/p>
?
M
?
y
?
(1-1)
v
0
?
in
?
c
1
?
?
?
c
c
?
?
1
p>
?
?
?
?
1
?
?
?
1
?
?
式中:
(
u
,
v
)
是特征点的图像坐标,
(
x
c
,
y
c
,
z<
/p>
c
)
是特征点在摄像机坐标系的坐标,<
/p>
k
x
、
k
y
是焦距
归一化成像平面上的成像点坐标到图
像坐标的放大系数,
k
s
是对应于图像
坐标
u
、
v
的
摄像
机的
x
、
y
轴之间不垂直带来的耦合放大系数,
(
u
0
,
v
0
)
是光轴中心点的图像坐标即主点坐标,
(
x
c
1
,
y
c
1
)
是焦距归一化成像平面上的成像点坐标。
k
s
=
?
c
k
x
,
?
c<
/p>
是摄像机的实际
y
轴与理想
y
轴之间的夹角,单位为弧度。
< br>2
4
6
2
2
?
?
x
c
1
d
?
x
p>
c
1
(
1
?
k
c
1
r
?
k
c
< br>2
r
?
k
c
5
r
)
?
2
k
c
3
p>
x
c
1
y
c
1
?
k
c
4
(
r
< br>?
2
x
c
1
)
(1-2)
?
2
4
6
2
2
?
?
y
c
1<
/p>
d
?
y
c
1
(
1
?
k
c
1
r
?
k
c
2
r
?
k
c
5
r
)
?
k<
/p>
c
3
(
r
?
2
y
c
1
)
?
2
k
c
4
x
c
1
y
c
1
式中:
(
x
c
1
d
,
y
c
1
d
)
p>
是焦距归一化成像平面上的成像点畸变后的坐标,
k
c
1
是
2
阶径向畸变系数,
k
c
2
是
4
阶径向畸变系数,
k
c
5
是
6<
/p>
阶径向畸变系数,
k
c
< br>3
、
k
c
4
是切向畸变系数,
r
为成像点到<
/p>
摄像机坐标系原点的距离,
r
2
=
x
c
1
2
+
y
c
1
2
p>
。
1.1.2
操作界面
将
Matlab
的当前目录设定为含有标定工具箱的目录,即
to
olbox_calib
目录。在
Matlab
命令窗口运行
calib_gui
指令,弹出图
1
所示选择窗口。
图
1
内存使用方式窗口
图
1
窗口中,具有两个选项,分别是“
Standard
”和“
Memory efficient
”
。如果点击选择
“
Standa
rd
”
,则将目录中的所有图像读入内存中,所需内存较大。如
果点击选择“
Memory
efficient
”
,则将目录中的图像按照需要每次一幅图像读入内存中,所需内存较小。在
选择了
1
内存使用方式后,弹出标定工具箱操作面板。图
2
是选择“<
/p>
Standard
”后弹出的标定工具箱
操作面板。
图
2
标定工具箱操作面板
图
2
所示的标定工具箱操作面板具有
16
个操作命令键,其功能如下:
(1)
“
Image names
”键:指定
图像的基本名
(Basename)
和图像格式,并将相应的图
像读
入内存。
(2)
“
Read
names
”键:将指定基本名和格式的图像读入内存。
(3)
“
Extract grid
corners
”键:提取网格角点。
(4)
“
Calibration<
/p>
”键:内参数标定。
(5)
“
Show Extrinsic
”键
:以图形方式显示摄像机与标定靶标之间的关系。
(6)
“
Project
on
images
”键:按照摄像机的内参数以及摄像机的外参数
(
即靶标坐标系
相对于摄像机坐标系的变换关系
p>
)
,根据网格点的笛卡尔空间坐标,将网格角点反投影到图
像空间。
(7)
“
Analyse
error
”键:图像空间的误差分析
(8)
“
Recomp.
corners
”键:重新提取网格角点。
(9)
“
Add/Suppress
images
”键:增加
/
删除图像。
(10)
“
Save
”键:保存标定结果。将内参数标定结果以及摄像机与靶标之间的外参数
p>
保存为
m
文件
Ca
lib_results.m
,存放于
toolbox_cal
ib
目录中。
(11)
“
Load
”键:读入标定结果。从存放于
toolbox_calib
目录中的标定结果文件
< br>Calib_
读入。
(12)
“
Exit
”键:退出标定。
(13)
“
Comp.
Extrinsic
”键:计算外参数。
(14)
“
Undistort
image
”键:生成消除畸变后的图像并保存。
(15)
“
Export
calib data
”
键:输出标定数据。分别以靶标坐标系
中的平面坐标和图像中
的图像坐标,将每一幅靶标图像的角点保存为两个
tex
文件。
(16)
“
Show calib
results
”键:显示标定结果。
1.1.3
内参数标定
预先将命名为
Image1
~
Image20
的
tif
格式的<
/p>
20
幅靶标图像保存在
toolbox_
calib
目录中。
当然,采集的靶标图像也可以采用不同的格
式,如
bmp
格式、
jpg
格式等。但应注意,用于
标定的靶标图像需要采用相同的图像格式。摄像机
的内参数标定过程,如下所述。
(1)
指定图像基本名与图像格式
在图
p>
2
所示的标定工具箱操作面板点击“
Ima
ge names
”键,在
Matlab
命令窗口分别输
入基本名
Image
和图像格式
t
,出现下述对话内容:
Basename camera calibration images
(without number nor suffix): Image
Image format: ([]='r'='ras', 'b'='bmp',
't'='tif', 'p'='pgm', 'j'='jpg', 'm'='ppm') t
Loading image 1...2...3...4...5...6...7
...8...9...10...11...12...13...14...15...16...17..
.18...19...20...
done
同时,在
p>
Matlab
的图形窗口显示出
20
幅靶标图像,如图
3
所示。
< br>
2
Calibration images
图
3
靶标图像
(2)
提取角点
在图
2
所示的标定工具箱操作面板点击“
Extract
grid corners
”键。
?
在
Mat
lab
命令窗口出现“
Number(s) of
image(s) to process ([] = all images) =
”时,
输入要进行角点提取的靶标图像的编号并回车。
直接回车
表示选用缺省值。
选择缺
省值式,对读入的所有的靶标图像进行
角点提取。
?
在
Matlab
命令窗口出现“
W
indow size for corner finder (wintx and winty):
”时,分
别在“
wintx ([]
= 5) =
”和“
winty ([] = 5) =
”输入行中输入角点提取区域的窗口半
宽
m<
/p>
和半高
n
。
m<
/p>
和
n
为正整数,单位为像素,缺省值为<
/p>
5
个像素。选定
m
和
n
后,命令窗口显示角点提取区域的窗口尺寸
(2
n
+1)x(2
m
p>
+1)
。例如,选择缺省时角
点提取区域的
窗口尺寸为
11x11
像素。
?
在
Mat
lab
命令窗口出现
“
Do you
want to use the automatic square counting
mechanism
(0=[]=default)
or
do
you
always
want
to
enter
the
number
of
squares
manually
(1,other)?
”时,选择缺省值
0
表示自动计算棋盘格靶标选定区域内的方格行数和
列数,
选择值
1
表示人工计算并输入棋盘格靶标选定区域内的方格行数
和列数。
?
到显示所选择靶标图像的图形窗口,
利用鼠标点击设定棋盘格靶标的选定区域。
点
击的第一个角点作为靶标坐标系的原点,
顺
序点击
4
个角点形成四边形。
注意,<
/p>
所
形成的四边形的边应与棋盘格靶标的网格线基本平行。否则,影
响角点提取精度,
甚至导致角点提取错误。
?
在
Mat
lab
命令窗口出现
“
Size dX
of each square along the X direction ([]=100mm) =
”
和“
Size dY of
each square along the Y direction ([]=100mm) =
”时,分别输入方格
长度和宽度,单位为
mm
。方格长度和宽度的缺省值均为
100mm
。
?
在
Matlab
命令窗口出现“
Nee
d of an initial guess for distortion? ([]=no,
other=yes)
”
时,如果选择
no
则不输入畸变初始值,如果选择
yes
< br>则输入畸变初始值。输入的
畸变初始值,
将同时赋值给需
要估计的
5
个畸变系数,
即径向畸变系
数
kc(1)
、
kc(2)
、
kc(5)
和切向畸变系数
kc(3)
、
kc(4)
。如果不
估计
6
阶径向畸变系数
kc(5)
p>
,则
kc(5)
被赋值为
< br>0
。
按照上述步骤,对用于标
定的每一幅靶标图像进行角点提取。例如,
m
=5
,
n
=5
时,角
点提取区域的窗口尺寸为
11x11
像素,未输入
畸变初始值,此时图像
Image6
的角点提取结
果如图
4
所示。
图
4(a)
只标出了待提取角点的位置,图
4(b
)
标出了角点提取区域窗口和提取
出的角点。从图
4
中可以发现,图
4(a)
中的十字标记位置与角点具有明显偏差,但在角点附
3
近;
图
4(
b)
中的每个角点提取区域窗口包含了角点,
表示角点提取结果
的十字标记位置与角
点位置具有很好的吻合度。同样在
m
=5
,
n
=5
时,未输入畸变初始值,但通过鼠标点击设定
棋盘格靶标的选定区域时
,
所形成的四边形的边与棋盘格靶标的网格线成较大夹角,
此时
图
像
Image1
的角点提取结果如图
5
所示。从图
5
中可以发现,图
5(a)
中的十字标记位置与角
点具有明显偏差,
部分十字标记远离角点;
图
5(b)
中的很多角点提取区域窗口没有包含角点,
< br>表示角点提取结果的十字标记位置并不在角点位置,说明角点提取存在错误。
The red crosses should be close to the
image corners
50
100
150
200
250
300
350
400
450
1
00
200
Y
O
X
300
400
500
600
(a)
Extracted corners
50
100
150
Y
c
(
i
n
p>
c
a
m
e
r
a
f
r
a
m
e
< br>)
200
250
300
350
400
450
1
00
200
300
400
X
c (in camera frame)
500
600
dY
O
dX
(b)
图
4
合适的靶标选定区域与角点提取结果,
(a)
靶标选定区域,
(b)
角点提取结果
(3)
内参数标定
对用于标定的每一幅靶标
图像进行角点提取后,
在图
2
所示的标
定工具箱操作面板点击
“
Calibration
”键,即可完成摄像机的内参数标定。
内参数标定
时,
Matlab
工具箱首先进行初始化,即将图像中心点坐标
作为主点坐标的
初始值,
采用平面靶标网格的消失点估计出摄像
机的内参数作为内参数的初始值,
畸变初始
值设为
0
。
镜头畸变采用包括径向畸变和切向畸变的
Brown
畸变模型,
并假设
6
阶径向畸变
系数
kc(5)
=0
。假设摄像机的
x
轴与
y
轴严格垂直,即图像坐标
(
u
,
v
)
与归一化成像平面内的
成像点坐标
(
x
c1
,
y
c1
)
解耦,
k
s
=0
,
内参数采用
4
参数模型。
数组
est_d
ist(1:5)
是畸变系数
kc(1:5)
< br>是否标定的标志,只对标志取值为
1
的畸变系数标定,标
志取值为
0
的畸变系数不标定。
4
The red crosses should be close to the
image corners
50
100
150
200
250
300
350
400
450
1
00
200
300
400
500
600
Y
O
X
(a)
Extracted corners
50
100
150
Y
c
(
i
n
p>
c
a
m
e
r
a
f
r
a
m
e
< br>)
200
250
300
350
400
450
1
00
200
300
400
X
c (in camera frame)
500
600
dY
O
dX
(b)
图
5
错误的靶标选定区域与角点提取结果,
(a)
靶标选定区域,
(b)
角点提取结果
内参数标定给出初始化后的标定结果和优化后的标定结果。
其中,
< br>对内参数的优化采用
L-M
梯度下降法。优化后的结果中
给出的参数不确定性,是
3
倍的标准方差。
fc
中的两个
数据分别是
k
x
和
k
y
,即焦距归一化成像平面上的成像点坐标到图像坐标的放大系数。
cc
p>
为
光轴中心点的图像坐标
(
u
0
,
v
< br>0
)
,又称为主点坐标,单位为像素。
< br>alpha_c
是对应于图像坐标
v
的摄像机的实际
y
轴与理想
y
p>
轴之间的夹角
?
c
,单位为弧度,默认值为
0
弧度。后续给出的
< br>图像轴之间的夹角为对应于图像坐标
u
、
v
的摄像机的
x
、
y
轴之间的夹角,默认值为
90
< br>?
。
est_alpha
是
p>
alpha_c
是否标定的标志位,只有
e
st_alpha=1
时对
alpha_c
进行标定。
kc
为畸变
系数
k
c
1
~
k
c
5
,
kc(1)
为二阶径向畸变系数
k
c
1
,
kc(2)
为
4
阶径向畸变系数
k
c
2
,
kc(5)<
/p>
为
6
阶径向
畸变
系数
k
c
5
,
kc(3)
为图像坐标
u
对应于
xy
项的切向畸变系数
k
c
3
,
k
c(4)
为图像坐标
v
对应
于
xy
项的切向畸变系数
k
c
4
。
er
r
为将网格角点反投影到图像空间的误差的标准方差,单位
为像
素。在优化后的结果中,不确定性的数值越小,说明标定的精度越高。
如果不确定性项<
/p>
的数值与结果值相比所占比例较大,则需要重新标定。
初始化后的标定结果:
Focal
Length:
fc = [ 673.45516
673.45516 ]
Principal point:
cc = [ 319.50000
239.50000 ]
5
Skew:
lpha_c = [ 0.00000 ]
=> angle of pixel =
90.00000 degrees
Distortion:
kc = [ 0.00000
0.00000
0.00000
0.00000
0.00000 ]
优化后的标定结果:
Focal
Length:
fc = [ 657.80887
658.51372 ]
±
[ 1.86106
1.34683 ]
Principal point:
cc
= [ 302.95191
248.06759 ] ±
[ 1.88046
2.85817 ]
Skew:
alpha_c =
[ 0.00000 ]±
[ 0.00000] => angle of
pixel axes = 90.00000 ±
0.00000 degrees
Distortion:
kc
=
[
-0.25853
0.14834
0.00074
-0.00030
0.00000
]
±
[
0.00784
0.03727
0.00085
0.00042
0.00000 ]
Pixel
error:
err = [ 0.15205
0.12424 ]
(4)
显示摄像机与标定靶标之间的关系
完成内参数标定后,在标定工具箱操作面板点击“
Show <
/p>
Extrinsic
”键,即可在新的图
形窗口显示摄像机与标定靶标之间的关系,
如图
6
所示。
图
6(a)
为假设摄
像机固定时摄像机
与靶标之间的关系,图
6(b)
为假设靶标固定时摄像机与靶标之间的关系。
Extrinsic parameters (world-
centered)
Extrinsic parameters (camera-c
entered)
2
3
1500
500
1
5
4
5
Z
w
o
r
l
d
1500
2000
2500
O
c
Z
c
X
c
p>
Y
c
500
0
p>
500
0
3
4
p>
1
2
1000
-5
00
-500
0
500
1000
0
0
500
1000
X
w
orld
-1000
-500
0
500
1000
Y
w
orld
(a)
(b)
图
6
摄像机坐标系与靶标之间的关系,
(a)
摄像机固定,
(b)
靶标固定
(5)
误差分析
< br>完成内参数标定后,在标定工具箱操作面板点击“
Analyse error<
/p>
”键,即可在新的图形
窗口显示出标定使用的所有角点反投影到图
像空间的图像坐标误差,如图
7
所示。在图
7
所示的图形窗口,
利用鼠标移动十字标尺可以选择角点,
即可在命令窗口显示出该角点的信
息,包括该角点所属图像、索
引号、以方格为单位的坐标、图像坐标、反投影后的图像坐标
误差、角点提取区域的窗口
半宽
m
和半高
n
。
选择角点后在命令窗口显示的信息:
Selected image: 5
Selected
point index: 51
Pattern coordinates (in
units of (dX, dY)): (X,Y)=(11, 8)
Image
coordinates (in pixel): (426.32, 261.58)
Pixel error = (-0.05908, 0.17309)
Window size: (wintx,winty) = (6, 6)
(6)
反投影到图像空间
完成内参数标定后,在标定工具箱操作面板点击“
Project
on
image
”键,在
Matlab
命
令窗口出现
“
Number(s) of image(s) to process ([]
= all images) =
”
时,
输入要进行反投影的靶
标图像的编号并回车。
直接回车表示选
用缺省值。
选择缺省值式,
对用于标定的所有靶标图
6
像进行反投影。
选择图像后,
在新的图形窗口显示反投影结果,
并在命令窗口输出用于标定
的所有靶标图像的角点反投影的图像误差的标准方差
。
Image6
反投影的结果如图
8<
/p>
所示,
其中“
+
”为角点的图像坐标位置,
“
o
”为角
点反投影的图像坐标位置。
点击“
Project on
image
”键后,在命令窗口显示的信息如下:
Number(s) of image(s) to show ([] = all
images) = 6
Pixel error:
err = [0.66512
0.41428] (all active images)
Reprojection error (in pixel) - To
exit: right button
0.4
0.3
0.2
0.1
0
y
p>
-0.1
-0.2
-0.3
-0.4
-0.5
-0.6
-
0.4
-0.2
x
0
< br>0.2
0.4
图
7
反投影到图像空间的角点图像坐标误差
Image 6 - Image points (+) and
reprojected grid points (o)
50
100
150
200
250
300
350
400
4
50
100
200
Y
< br>O
X
300
400
500
600
图
8
Image6
的角点反投影结果
(7)
图像畸变校正
完成内参数标定后,在标定工具箱操作面板点击“
Undistort im
age
”键,则按照畸变系
数对读入的所有靶标图像进行处理,
生成消除畸变后的图像并保存在
toolbox_calib
目
录中。
生成的消除畸变后的图像,
以原图像的文件名在基本名和
编号之间插入
_rect
作为其文件名。
图
9
所示为
Image6
的原始图像和消除畸变后的图像。
(8)
p>
增加
/
删除图像
在标定工具箱操作面板点击“
Add/Suppress im
age
”键,在命令窗口输入代表增加图像、
删除图像的数字,
然后输入图像编号,可以增加
/
删除标定使用的图像。
(9)
重新提取网格角点
7
完成内参数标定后,在标定工具
箱操作面板点击“
Recomp. corners
”键,在命
令窗口输
入角点提取区域的窗口半宽
m
和半高
n
、
输入重新提取网格角点的图
像编号、
选择冲投影方
式后,
即可对所
选图像重新进行角点提取。
重新进行角点提取后,
可以再次进行
内参数标定。
重新提取网格角点时采用了以前的标定结果,
经过
重新提取网格角点再次标定后,
内参数标
定精度会有所提高。如
果初次角点提取的效果较好,则重新进行网格角点提取的作用不大。
点击“
Recomp.
corners
”键后,在命令窗口显示的信息如下:
Re-extraction of the grid corners on
the images (after first calibration)
Window size for corner finder (wintx
and winty):
wintx ([] = 5) =
winty ([] = 5) =
Window size = 11x11
Number(s) of image(s) to process ([] =
all images) =
Use the
projection of 3D grid or manual click ([]=auto,
other=manual):
Processing
image 1...2...3...4...5...
done
(a)
(b)
图
9
原始图像和校正后图像,
(a)
原始图像
(b)
消除畸变后的图像
1.1.4
外参数标定
外参数标定是在内参数已
知的前提下进行的。
在完成摄像机的内参数标定后,
或者在命<
/p>
令窗口输入摄像机的内参数后,
可以对棋盘格靶标相对于摄像机的
外参数进行标定。
在标定
工具箱操作面板点击“
Comp. Extrinsic
”键,在命令窗口输入靶标图像名称和图像格
式,再
按照
1.1.2
节
(2)
中的过程提取角点,可实现靶标相对于摄像机的外参数标定。
外参数标定时,在命令窗口显示的信息如下:
Computation of the extrinsic parameters
from an image of a pattern
The
intrinsic camera parameters are assumed to be
known (previously computed)
Image name
(full name without extension): Image1
Image format: ([]='r'='ras', 'b'='bmp',
't'='tif', 'p'='pgm', 'j'='jpg', 'm'='ppm') t
Extraction of the grid corners on the
image
Window size for corner finder
(wintx and winty):
wintx ([] = 5) =
winty ([] = 5) =
Window size = 11x11
8
-
-
-
-
-
-
-
-
-
上一篇:英语词性转换规则大全知识讲解
下一篇:专升本词汇常见词根词缀