基于灰度值的匹配方法研究(一) 您所在的位置:网站首页 灰度值灰度级 基于灰度值的匹配方法研究(一)

基于灰度值的匹配方法研究(一)

2023-07-10 18:04| 来源: 网络整理| 查看: 265

这在机器视觉领域是一个古老问题,已经被无数的人研究过,提出了各种匹配方案。在OpenCV里也有灰度匹配的函数,只可惜它不支持旋转,因此无法应用于实际场景。现在在这里叙述一些我做这个算法后的感悟。供新入门的读者参考。因为一些原因,本系列文章只做流程上的描述和代码片段而不会给出完整的代码。

作为启发性文章,这里说一下灰度匹配是做什么的。灰度匹配是用一个已知的图案作为模板,在运行时图像中查找定位这个模板,包括模板的位置角度等信息,可以用${ \left( x, y, \theta \right) }$表示。在机械手相关应用中它可以确定物体的位置。而在其它应用中可能只为了确定某个物体的数量或有无。比如用机器视觉检查一个电路板中某个电容有没有正确安装就可以用匹配检测电路板中特定位置有没有出现电容的图案。如下图所示,在一个人像中定位眼睛的位置。图片来自于网络。

本文以NCC匹配方法为例叙述我的实现方法。首先像其他类型的匹配一样为了提高效率,要对模板和运行时图像做金字塔处理。另外,为了适应模板的旋转,不能把模板中的所有像素都用来做计算,那样速度慢而且旋转模板会在边缘外出现空白像素。我的做法是从中选择一部分像素点。考虑到随机或等距抽样可能会导致匹配时位置漂移,一个合适的策略是对模板分区,在每个分区中:

如果这个分区有边缘则选择边缘最强的点和它附近的两个点; 如果这个分区中没有边缘(梯度值普遍较小)则取此分区正中心的点和它附近的两个点。

设置分区的原因是尽可能让选择到的点均匀分布在模板的各个位置,避免点集中在某一个区域里。分区数量可以自定义,我设置的是25个分区。因此总共抽取25×3=75个像素点。

下面是根据上述方法实现的算法效果图。开发环境是VS2015、OpenCV430和Qt5.9,测试电脑配置是AMD A4-9125的CPU,测试用图是130万像素的。图中小窗口模板图里的蓝色的点就是选出来的匹配用的像素点:

经过测试此方法定位精度尚可,且可以抵抗一些诸如模糊、少量噪声或其它类型的形变。下一篇文章将介绍如何在这个匹配里使用OpenCL加速运算。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有