一、为什么?
相机标定的目的是为了确定相机内部参数和外部参数,以便修正图像并将图像坐标映射到世界坐标,或者从世界坐标映射到图像坐标。这个过程是计算机视觉和三维感知任务的关键步骤之一,它有以下主要目的:
(1)减小畸变:相机镜头和传感器可能引入径向和切向畸变,使得图像中的直线变得弯曲或者物体的形状不准确。通过标定相机,可以矫正这些畸变,使图像更准确。
(2)确定内部参数(intrinsic parameters):内部参数包括焦距、主点坐标和相机畸变参数。这些参数是描述相机如何捕捉世界的重要因素,它们的准确值对于计算深度、距离和姿态等任务至关重要,相机内参标定就是为了获取精确的内部参数。
(3)确定外部参数:外部参数包括相机的位置和方向。这些参数描述了相机相对于世界坐标系的位置和朝向,允许将图像坐标映射到世界坐标,这对于机械臂的抓取很有帮助。
(4)相机姿态估计:相机标定还可用于估计相机在拍摄图像时的姿态,即相机的旋转和平移。这对于虚拟现实、增强现实、机器人导航和定位等应用至关重要。
二、标定工具camera-calibration
使用ros-noetic-camera-calibration工具包来方便地在ROS1 Noetic中标定相机。
camera_calibration包是一个允许使用棋盘格来轻松校准单目或立体相机的ROS包。
相机信息中的内参相关内容
当处理相机内参时,常见的三个参数是 D、K 和 P,此外相关的还有畸变模型。
(1)D 畸变系数(distortion_coefficients):
D 是一个通常包含五个元素的数组 [k1, k2, p1, p2, k3],它用于描述相机图像中的径向和切向畸变。
k1 和 k2 是径向畸变系数,它们用于描述镜头的弯曲形状,通常是负数。
p1 和 p2 是切向畸变系数,它们用于描述镜头的畸变不对称性,通常是很小的值。
k3 是一个更高阶的径向畸变系数,通常情况下很小,有时甚至可以忽略。
D 用来表示径向和切向畸变。
(2)K 相机内参矩阵(camera_matrix):
K 是一个3x3的矩阵,它包括了相机的内部参数,用于将相机坐标系中的三维点映射到图像平面上的二维坐标。
K 的主要元素包括:
K[0] 和 K[4] 是焦距在图像 x 和 y 轴上的分量,通常以像素为单位。
K[2] 和 K[5] 是光心在图像 x 和 y 轴上的坐标,也以像素为单位。
K[8] 通常是1,是一个归一化参数。
K 包含了焦距和主点的信息。
(3)P 投影矩阵(projection_matrix):
P 是一个3x4的矩阵,它包含了相机的投影参数,用于将相机坐标系中的三维点映射到图像坐标系。
P 的元素包括了内参和外参信息。
其中 P[0] 和 P[5] 分别对应于焦距 fx 和 fy,用于将相机坐标系的 x 和 y 坐标映射到图像坐标系上。
P[2] 和 P[6] 对应于光心的 x 和 y 坐标 cx 和 cy。
P[3] 和 P[7] 通常为0,用于表示没有视角的旋转或平移。
P[10] 通常是1,是一个归一化参数。
投影矩阵 P包含了相机的内部参数和畸变参数。
三、标定的材料
棋盘格:需要准备一个大小适中的黑白棋盘格,计算大小8x6 方格大小9X7的棋盘格是常见的选择,但请注意,内部角点的数量比较少的情况下,标定可能会不够精确。
四、标定步骤
1、连接同一局域网;
2、启动ros:
# roscore
3、启动相机:
# roslaunch rocon_rtsp_camera_relay rtsp_camera_relay.launch
4、启动标定程序
# rosrun camera_calibration cameracalibrator.py --size 7x5 --square 0.04 image:=/rtsp_camera_relay/image camera:=/rtsp_camera_relay --no-service-check
5、移动标定板,进行标定
浙公网安备 33010602011771号