棋盘格检测--Automatic camera and range sensor calibration using a single shot

本文介绍了一种基于模板匹配的棋盘格特征点检测算法,该算法首先定义角点模板并进行图像卷积得到Corner likelihood图,通过非极大值抑制和梯度方向统计进行候选点筛选,最后进行亚像素角点定位和方向优化。适用于机器人视觉和相机标定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Automatic camera and range sensor calibration using a single shot
Robotics and Automation (ICRA), IEEE, 2012: 3936-3943
2012 IEEE International Conference on.

这里主要介绍一下 Automatic camera and range sensor calibration using a single shot 这篇文献中的棋盘格特征点检测算法
参考了 https://blog.youkuaiyun.com/electech6/article/details/52770010

大的思路就是基于模板匹配检测棋盘格角点,首先定义角点的模板,然后使用模板和图像进行卷积得到一个 Corner likelihood 图 C,将卷积响应较大的位置作为棋盘格角点的候选位置,接着使用了非极大值抑制进行过滤,然后用梯度方向信息进行二次过滤,具体就是用梯度统计的方法在一个n x n局部邻域内验证这些候选点。

下面进行详细分析
首先来看看这个 Corner likelihood 图 C 是怎么得到的? 它是 模板和图像进行卷积得到的。需要先定义角点模板,这里我们定义了两组不同的模板(两种角点原型), two different n × n corner prototypes,主要针对两种不同情况,
第一种情况就是针对 axis-aligned corners,如下图所示
在这里插入图片描述
我们定义的模板如下图所示
在这里插入图片描述
第二种情况就是棋盘有旋转45度的角点,定义的模板如下图所示
在这里插入图片描述
每种角点原型定义了 四个 filter kernels {A,B,C,D}
Each prototype is composed of four filter kernels {A,B,C,D}, which are convolved with the input image I

从模板定义图我们可以看出, A,B是互为对角的, C,D 互为对角,
对应一个棋盘格角点,要么 A、B 比 C、D 亮,要么C、D比 A、B 亮。如何将这个特点使用数学公式描述了

在这里插入图片描述
上面的 i 表示 prototype类型 s_i_1 ,s_i_2 表示 the likelihood of the two possible flippings for prototype i,即这个 1,2 对应角点翻转的情况,如下图所示就是一个翻转情况, s_i_1 对应下图左边的情况,s_i_2 对应下图右边情况,i=1(白色为255,黑色为0)
在这里插入图片描述
µ 表示 使用一类角点原型 4个滤波器核进行图像卷积响应 求和平均,类似计算邻域的均值
每一类角点原型有两种情况(对应翻转),一共有两类角点原型(对应旋转),一共有四种情况,
图像每个位置我们不知道是哪种情况,所以将四种情况都计算一遍,然后以响应值最大的作为输出
所以 c 是求 四种情况中响应最大的那个响应值,

Corner likelihood 图 C 如下所示
在这里插入图片描述

Importantly, note that the above definition leads to a low likelihood c, if any of the four filter kernels responds weakly. This is important for removing as many non-checkerboard style corners as possible from the hypotheses space.

注意: 从上面的定义我们知道,如果4个卷积核响应中任意一个比较弱,那么就会得到一个较小的 likelihood c,这对于过滤图像中很多非棋盘格角点的位置很重要。当然这也会导致一些漏检问题,因为图像存在一些畸变、光照等问题,导致 4个卷积核响应中某一个响应可能比较弱,那么就会直接过滤掉了。

To produce a list of corner candidates, we apply conservative non-maxima-suppression (with parameters n_nms and τ_nms ) [18] on C
接下来我们在 C 上进行 非极大值抑制,过滤一些噪声点。

followed by verifying the candidates by their gradient statistics in a local n × n pixel neighborhood,
接着我们在 n × n 邻域 使用梯度方向统计 进行 角点验证,对应棋盘格角点,其邻域梯度方向非零的值基本是两个值中的一个,对应这个邻域中的两条直线,下面就是用方向直方图将这两条直线的角度找出来,使用 mean shift 得到 α1 and α2, 对应这两条直线

We compute a weighted orientation histogram (32 bins) from Sobel filter responses and find the two dominant modes α1 and α2 using mean shift [19]

Based on the edge orientations, we construct a template T for the expected gradient strength ||∇I|| 2
基于上面得到的直线方向,我们构建一个模板 T,然后用这个 T 和 梯度幅值 ||∇I|| 2 计算 归一化相关系数 normalized cross-correlation operator

将这个 归一化相关系数 与 corner likelihood 相乘得到最终的 corner score,使用阈值过滤,得到最终的 corner candidates
在这里插入图片描述
B. Sub-pixel Corner and Orientation Refinement 亚像素角点和方向优化

角点亚像素精确定位有助于相机标定准确度的提升。这里我们优化角点的位置和方向两个信息。这里的位置和方向优化都是基于方向约束来设计的。

对于角点位置优化来说,假定角点位于 c 点,其邻域有一个图像点 p, 其图像梯度为 g_p, 这个梯度方向应该垂直于 pc 线段的方向,也就是这两个向量相乘为0 即: g_pT(p-c)=0 ,当p点不是边缘点,位于平坦区域,那么其图像梯度 g_p=0, 还是满足 g_pT(p-c)=0

在这里插入图片描述
在实际中,平坦区域的图像点的梯度可能不是0,边缘点的梯度方向不一定完全垂直边缘直线方向,可以使用下面的最小化来表示
在这里插入图片描述
N_I 是一个位于角点候选位置的 局部 11 × 11 的像素区域,上面这个最小化问题有一个解析解:
在这里插入图片描述

接下来优化边缘方向 edge orientation vectors e1 和 e2,we seek to minimize the error in deviation of their normals
with respect to the image gradients,这里我们最小化 图像梯度和他们的法线方向的偏差,即梯度方向和法线方向是垂直的
在这里插入图片描述
M_i 是邻域的一些点,这些点位于边缘直线上,neighboring pixels, which are aligned with the gradient
mi = [cos(αi )sin(αi)]T of mode i
上面最小化问题的解可以通过设置 上式 Lagrangian 的 derivative 为 0,变为一个 eigenvalue problem, ei 对应一个矩阵最小特征值对应的向量,这个矩阵如下所示
在这里插入图片描述

棋盘格检测:
这里通过检测到的角点,将属于同一个棋盘的角点连接起来。具体步骤如下:给定一个种子角点,我们沿着它的边缘方向 e1 和 e2 寻找离它最近的角点,我们得到一个 2 × 2 棋盘区域,以及一个对应的 energy value E(X,Y),然后我们向四周扩展这个 2 × 2 棋盘区域,具体往哪里扩展了? 朝使 E(X,Y) 下降最多的那个方向 扩展。最终我们找到一个棋盘格内左右的小方块区域。

Given a seed corner, we search for its closest neighbors in the direction of its edges e 1 and e 2 , yielding an initial
2 × 2 checkerboard hypothesis with an associated energy value E(X,Y). To optimize E(X,Y), we propose expansion
moves on Y, which expand any of the checkerboard borders by a single row or column. Amongst all four possibilities,
we select the proposal, which reduces E(X,Y) the most.

Fig. 3(a) illustrates the expansion moves exemplarily

在这里插入图片描述
能量函数定义
在这里插入图片描述

11

### 编译 LiDAR-Camera 外参标定工具箱 要成功编译 **General, Single-shot, Target-less, and Automatic LiDAR-Camera Extrinsic Calibration Toolbox** 工具箱,需遵循以下指导原则: #### 依赖项安装 该工具箱通常需要一些常见的计算机视觉库以及点云处理框架的支持。以下是可能涉及的主要依赖项及其安装方式[^1]: - CMake (版本 ≥ 3.10): 使用 `sudo apt install cmake` 安装。 - OpenCV (版本 ≥ 4.0): 可通过包管理器或源码构建方式进行安装。 - PCL (Point Cloud Library): 提供点云数据结构和操作功能,可通过命令 `sudo apt-get install libpcl-dev` 进行安装。 #### 获取源代码 从官方仓库克隆项目源代码到本地环境。假设该项目托管于 GitHub 上,则可以执行如下命令获取最新版本的代码: ```bash git clone https://github.com/your-repo-url/lidar-camera-calibration-toolbox.git cd lidar-camera-calibration-toolbox ``` #### 配置与生成 Makefile 文件 进入项目的根目录后,利用 CMake 创建适合当前系统的构建文件。创建一个单独的构建目录来保持原代码整洁,并在此基础上完成配置过程: ```bash mkdir build && cd build cmake .. ``` 此阶段可能会遇到因缺少某些依赖而导致错误的情况;此时应按照提示补充缺失组件后再重新尝试上述指令。 #### 执行实际编译流程 一旦所有必要的设置都已完成,就可以启动正式的编译工作了: ```bash make -j$(nproc) ``` 这里 `-j$(nproc)` 参数表示并行使用多个 CPU 核心加速整个进程,从而缩短等待时间[^2]。 #### 测试验证 为了确认最终产物能够正常运作,在大多数情况下会附带一组预定义好的测试样例用于初步检验效果。运行这些脚本可以帮助快速定位潜在问题所在位置: ```bash ./test_lidar_camera_calibration ``` 以上即为针对指定类型的 LiDAR 和 Camera 的外参自动化标定工具箱的一般化编译指南[^3]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值