文章目录

  • 前言
  • 实验任务与要求
  • 1 实验情况概述:
  • 2 算法流程
  • 3 实验结果与分析
    • 3.1 “01.jpg”和“02.jpg”检测结果
    • 3.2 “03.jpg”和“04.jpg”检测结果
    • 3.3 “05.jpg”检测结果
    • 3.4 其它问题

更新日期:2021/6/26

前言

模板匹配是将模板图像与目标图像中每一处做比较,得出一个相似度(或距离)值,如果模板图与目标图像的某一位置的相似度较高,则该位置可能是目标位置。

本次实验给出几张图片,图片中有大小、角度等不同的多个螺母,要求从图片中检测出这些螺母(详细实验内容及要求请见下文)。

由于某些图片存在较大噪声干扰,实验中基于传统的模板匹配方法,尝试过各种手段,有些螺母始终不能很好地响应出亮点,仅两张图片中的螺母能在不出错的情况下完全检测出。要想实现更佳的效果,可以尝试使用机器学习的方法。


提示:博主正在学习《计算机视觉》(本科)课程,此博文原为本人实验课程技术报告,经整理后发布,欢迎大家相互交流学习。本人才疏学浅,如果有不到位的地方,欢迎大家提出意见和建议。
文章除特别注明处外,均为博主原创,转载请附原文出处。以下是本文正文内容。

实验任务与要求

图像01~05.jpg中是几个螺母的照片,请设计并实现一个方法,正确地检测出其中的螺母,注意:有一个是圆形的不要检测,只检测六边形螺母。可以从其中一幅图像中截取模板。

01.jpg-05.jpg:
(实验材料图片为课程老师原创,已得到同意发布,请勿盗用)

1 实验情况概述:

实验过程中,曾尝试过模板匹配、边缘匹配、高斯滤波处理、双边滤波处理等各种方法,均没有取得良好的效果:“03.jpg”中的三个螺母和“04.jpg”中的一个螺母在响应图中,亮点不够明显,不能很好地检测出;在“05.jpg”中,只有1个螺母能被成功响应。只有在“01.jpg”“02.jpg”两张图像上,经过不断地调整,得到了完全正确的识别结果。

2 算法流程

最终算法的流程如下:

第一步:模板库建立①截取模板。在“01.jpg”中找出有代表性的螺母,截取作为模板;②模板旋转。每个模板以步长13°旋转,旋转到60°的位置。旋转到60°是因为螺母是中心对称图形,每旋转30°就和原图相同。实际上,由于螺母上的锈纹等原因,螺母最好旋转360°,但这样会大大增多模板数量,降低检测速度,故不采用。旋转得到的模板分别建立图像金字塔,分别得到大小不同的模板。经过以上三个步骤,得到了每个原始模板不同朝向、不同大小的模板,用于下一步检测。实验中截取的原始模板图有6个,如图1所示:

图1 截取的原始模板

第二步:待检测图像预处理。载入待检测图像,将其进行高斯模糊预处理,目的是去除图像的噪声。

第三步:模板匹配。将第一步得到的模板库中每个模板分别与图像进行匹配,得到最大响应图。

第四步:找出螺母位置①响应图高斯模糊预处理。此步骤的目的是消除由于匹配时噪声引起的响应图中的小亮点。比如,圆形零件位置处会产生小而亮的点,使用高斯模糊可以减弱其亮度。而六边形螺母位置的亮点一般较大,受高斯模糊影响较小;②阈值处理。相应最大值乘以特定的系数,得到阈值亮度,对响应图进行阈值;③获得每一个连通分量的质心位置,得到每个点的坐标,即为检测结果。

3 实验结果与分析

对每个图像分别进行实验。

需要调整的参数主要是阈值系数(最大响应要乘的数)和响应图预处理的高斯滤波核大小。其中,阈值系数每个图像各不相同,高斯滤波核大小除“02.jpg”外均设置为15*15,“02.jpg”设置为15*15,“02.jpg”设置为35*35。在调整参数的过程中,首先确保的是正确性,在不出错的基础上再尽量识别更多的螺母。

以下为5张图像的检测结果和对结果的分析。

3.1 “01.jpg”和“02.jpg”检测结果

“01.jpg”“02.jpg”两张图像上,经过不断地调整,得到了完全正确的识别结果。其中,“01.jpg”识别良好,是因为模板都是从这张图像上截取的;在“02.jpg”,采用了35*35的滤波核对响应图进行滤波,而不是其它图像的15*15,原因是能更好地消除圆形零件小而亮的响应点,而15*15不能做到。

“01.jpg”“02.jpg”两张图像的识别结果分别如图2和图3所示,左为识别结果,右为对应模糊处理过的响应图:

图2 01.jpg识别结果和15*15高斯滤波后的响应图 图3 02.jpg识别结果和35*35高斯滤波后的响应图

3.2 “03.jpg”和“04.jpg”检测结果

“03.jpg”中的三个螺母和“04.jpg”中的一个螺母不能良好的检测出。原因是响应图中的亮点不够明显,如果阈值设置太低,又会使圆形零件被错误识别。“03.jpg”“04.jpg”两张图像的识别结果分别如图4和图5所示,左为识别结果,右为对应模糊处理过的响应图:

图4 03.jpg识别结果和15*15高斯滤波后的响应图 图5 04.jpg识别结果和15*15高斯滤波后的响应图

3.3 “05.jpg”检测结果

“05.jpg”识别结果最差,原因在于背景图像部分的匹配结果差。在模板中,除了有模板部分,在四角和中心还有一部分的背景。在“05.jpg”中,由于背景相较前几张图像变化较大,故模板在螺母位置不能很好地匹配,响应很弱。“05.jpg”的识别结果如图6所示,左为识别结果,右为对应模糊处理过的响应图:

图6 05.jpg识别结果和15*15高斯滤波后的响应图

针对“05.jpg”的问题,一个可能的解决思路是:对opencv模板匹配函数进行改进,改进方案为:可以指定一张和待匹配图像同尺寸的二值图像,用于表示哪些像素参与匹配,哪些像素不参与匹配。这样,就可以在匹配时略去背景图像部分,仅螺母的部分参与匹配。

3.4 其它问题

问题1:实验中建立的模板库中的模板多达120个,检测效率低下,通常要等待5秒到10秒才得出检测结果;

问题2:不同的图像需要不同的阈值和响应图高斯滤波核大小设置,无法做到自适应。

基于模板匹配的螺母检测(计算机视觉实验)相关推荐

  1. 【笔检测】基于模板匹配+PCA笔检测matlab源码

    ​ 一.简介 1 PCA PCA(Principal Component Analysis)是常用的数据分析方法.PCA是通过线性变换,将原始数据变换为一组各维度线性无关的数据表示方法,可用于提取数据 ...

  2. 高斯肤色概率模型matlab,基于肤色模型与模板匹配的人脸检测研究

    摘要:本文提出了一种基于肤色模型与模板匹配的人脸检测方法.基于YCbCr色彩空间的高斯概率模型,对肤色进行相似度计算和二值化分割,采用形态学对二值化后的图像去噪处理,随后又利用人脸先验知识进一步排除非 ...

  3. python opencv数字识别_基于模板匹配的手写数字识别(python+opencv)

    智能计算课第一周的实验是做基于模板匹配的手写数字识别,光听见就很感兴趣,于是决定认真做做这个实验,本实验基于python3+opencv的python版本,所用到的知识都比较简单,基本上边学边做,技术 ...

  4. 基于模板匹配和遗传算法的人眼定位

    基于模板匹配和遗传算法的人眼定位 余甜甜,唐普英(电子科技大学光电信息学院,四川成都6l0054) 摘要:文中提出了一种利用模板匹配与遗传算法相结合的人眼定位算法.根据人脸几何特征将人脸分为几个特征区 ...

  5. 基于模板匹配的车牌识别算法,输出数字和英文字母

    目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 车牌识别是计算机视觉领域中的一个重要问题,其目的是从图像中自动识别出车辆的车牌信息.基于模板匹配的车牌识别算法是一种常见的方法,其基本思想 ...

  6. python信用卡客户_Python开发之基于模板匹配的信用卡数字识别功能

    环境介绍 python 3.6 + OpenCV 3.4.1.15 原理介绍 首先,提取出模板中每一个数字的轮廓,再对信用卡图像进行处理,提取其中的数字部分,将该部分数字与模板进行匹配,即可得到结果. ...

  7. 基于模板匹配的知识图谱问答系统

    基于模板匹配的知识图谱问答系统 一,什么是基于知识图谱的问答(KBQA)? KBQA–knowledge base question answering,通过对问题进行语义理解及解析,通过知识库进行查 ...

  8. 一种基于模板匹配的图像配准方法

    01 前言 如下图所示,有时候参考图像与浮动图像的灰度区别很大,但是它们又有某一个小区域比较相似,这种情况下直接通过特征点匹配或形变优化来配准的效果并不理想. 这个时候我们可以尝试使用模板匹配的方法来 ...

  9. 基于模板匹配的数字识别

    基于模板匹配的数字识别,将标准的8*16像素的数字0123456789读取,二值化,对每个数字进行等分区域分割,统计每个区域内的黑色像素点的个数,即为特征初值.采用欧式距离的模板匹配法. z//基于模 ...

  10. 基于模板匹配方法的机场飞机起飞-目标检测

    文章目录 1. 模板匹配方法的定义 2. 标注软件labelme 标注以及数据解析裁剪模板 2.1 labelme简介 2.2 labelme标注的json文件解析 3. 基于Opencv pytho ...

最新文章

  1. Python中的Numpy模块(1,numpy创建)
  2. ❤️六W字《计算机基础知识》(八)(建议收藏)❤️
  3. BZOJ 1007 [HNOI2008]水平可见直线 ——半平面交 凸包
  4. 拓端tecdat|决策树算法建立电信客户流失模型
  5. 管理感悟:对事又对人
  6. 高中单招计算机基础知识题库,2015单招考试计算机基础知识题库
  7. 阿里云网站备案-变更备案问题如何解决
  8. 7.15周三晚8点,dotnet课堂全新起航,张善友/陈计节/刘腾飞我们一起来聊聊abp的故事...
  9. 到底是什么决定了二极管的最高工作频率?
  10. 大菠萝?Pinia已经来了,再不学你就out了
  11. 几种常见开源软件授权协议
  12. Static Single Assignment(SSA)
  13. 湖南科技大学2018年C语言程序设计实验题——问题 J: 成绩统计
  14. 大器晚成总比一事无成要强
  15. Codeforces 1132F
  16. c语言滤出是个最小值,经典滤波算法及C语言程序
  17. 一个字符导致oracle安装出现ora-12154
  18. 微信小程序云开发路由模块真机调试报错
  19. 5行代码带你爬取 “2021福布斯排行榜“,看看中国都有哪些人?
  20. matlab实指数序列,matlab入门篇正弦信号实指数信号和复指数信号的仿真

热门文章

  1. 无聊的小知识--数据中心为啥要建在山区
  2. 关于图像处理中的矩阵卷积运算
  3. 【今日头条测试开发笔试】部分题目总结
  4. Unity-TouchScripts中使用TUIO的记录和简单的代码分析
  5. bat文件批量创建文件夹
  6. 「高并发秒杀」java使用教程第五版答案
  7. 银行业务头条体系推广
  8. 计算机说课稿模板小学数学,【小学数学说课稿范文模板+范文(精编20篇)】 说课稿模板小学数学...
  9. Word论文参考文献排版
  10. 从0到1搭建大数据平台之数据采集篇