VMware虚拟机中ubuntu使用记录(6)—— 如何标定单目相机的内参(张正友标定法)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、张正友相机标定法
    • [1. 工具的准备](#1. 工具的准备)
    • [2. 标定的步骤](#2. 标定的步骤)
      • [(1) 启动相机](#(1) 启动相机)
      • [(2) 启动标定程序](#(2) 启动标定程序)
      • [(3) 标定过程的操作](#(3) 标定过程的操作)
      • (5)可能的报错
    • [3. 标定文件内容解析](#3. 标定文件内容解析)

前言

张正友相机标定法是一种通过测量相机拍摄棋盘格上的特征点来计算相机内参和畸变参数的方法。这种标定方法简单易行,能够帮助恢复真实世界中的三维信息,提高图像处理和分析的准确性。在计算机视觉和机器视觉领域中具有重要应用价值。

一、张正友相机标定法

在ROS中已经集成了对相机完成标定以及畸变矫正的整个流程,直接在ros中调用即可。

1. 工具的准备

黑白棋盘格

黑白棋盘格是由9×7的黑白格组成。在网上可以找到黑白相机棋盘格的pdf文档(需要的可以找我),下载之后将其打印在A3或者A4纸张上,然后量出其方格边长即可(自己量多少就写多少,单位换为国际单位m)。我使用的A4纸张,最终手动量出来A4的是0.0283m

2. 标定的步骤

(1) 启动相机

启动ROS

bash 复制代码
打开终端1输入: roscore

启动相机,在catkin_ws目录下

打开终端2输入:

bash 复制代码
   source devel/setup.bash                    //已生效过环境,可跳过此步
   roslaunch usb_cam usb_cam-test.launch      //usb_cam-test.launch为自己的文件名

(2) 启动标定程序

主目录(home)下打开终端3:

bash 复制代码
rosrun camera_calibration cameracalibrator.py --size 8×6 --square 0.0283 image:=/usb_cam/image_raw

整个指令输入过程的终端页面如下所示:

其中,
--size :是上述棋盘的宽度和高度
--square 0.0283 :是棋盘的一个小方格的实际尺寸。按自己实际测量的即可,本次测量出来的是28.3毫米,故将square参数改为0.0283即可。
/usb_cam/image_raw:为自己相机的数据的话题

(3) 标定过程的操作

启动标定程序后,弹出以下窗口

窗口的参数介绍
X :表示标定板在视野中的左右位置。
Y :表示标定板在视野中的上下位置。
Size :标定板在占视野的尺寸大小,也可以理解为标定板离摄像头的远近。
Skew:标定板在视野中的倾斜位置

具体的操作过程:

  1. 标定过程中左右,上下,前后,对角方向前后倾斜标定板,这样使得右边X,Y,Size,Skew变成绿色
  2. X,Y,Size,Skew变成绿色后,CALIBRATE按钮变为蓝色,然后点击(等上半分钟左右)变为下面三个按钮都可以点击
  3. 依次点击SAVE(保存),点击SAVE之后:('Wrote calibration data to', '/tmp/calibrationdata.tar.gz'),如下图所示:
  4. COMMIT(提交)到相机配置文件中。即可将标定结果保存至本地。

(5)可能的报错

1)问题描述

如果第四步点击COMMIT出现如下报错:

service uri = self. get service uri(request) File

"/opt/ros/melodic/lib/python2.7/dist-packages/rospy/impl/tcpros

service.py", line 470, in get service uri

raise serviceException("service [%s] unavailable"%self.resolved name)

rospy.service.ServiceException: service [/camera/set camera info]unavailable

2) 解决方法

那么只能自行将标定参数移动至:~/.ros/camera_info,具体步骤如下
1.转移到标定文件的存放目录下

css 复制代码
cd /tmp

2.解压calibrationdata.tar.gz文件

bash 复制代码
tar -zxvf calibrationdata.tar.gz

3.将ost.yaml复制到~/.ros/camera_info(若没有camera_info目录,创建一个即可)

4.将ost.yaml重命名为head_camera.yaml,并修改里面代码

cpp 复制代码
camera_name:head_camera

head_camera.yaml文件内容如下所示:

最后,使用上述参数的配置文件,重新运行相机的驱动,即可获得较为准确的图像数据

3. 标定文件内容解析

(1) 张正友标定法产生的相机配置文件里:

文件内容对应的参数如下:

camera_matrix:[fx 0 Cx,0 fy Cy,0 0 1]

Distortion_matrix:[k1,k2,p1,p2,k3]

相关推荐
叫我龙翔22 分钟前
【Linux】进程间关系与守护进程
linux·运维·服务器·计算机网络
小诸葛的博客24 分钟前
Ubuntu如何如何安装tcpdump
linux·ubuntu·tcpdump
S hh43 分钟前
【Linux】进程地址空间
java·linux·运维·服务器·学习
康熙38bdc2 小时前
Linux 进程优先级
linux·运维·服务器
hhzz2 小时前
Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)
android·linux·jar
只是有点小怂2 小时前
parted是 Linux 系统中用于管理磁盘分区的命令行工具
linux·运维·服务器
三枪一个麻辣烫3 小时前
linux基础命令
linux·运维·服务器
cuisidong19973 小时前
如何在 Kali Linux 上安装 Google Chrome 浏览器
linux·运维·chrome
光通信学徒4 小时前
ubuntu图形界面右上角网络图标找回解决办法
linux·服务器·ubuntu·信息与通信·模块测试
南种北李4 小时前
Linux自动化构建工具Make/Makefile
linux·运维·自动化