基于模板匹配的螺母检测(计算机视觉实验)
文章目录
- 前言
- 实验任务与要求
- 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:不同的图像需要不同的阈值和响应图高斯滤波核大小设置,无法做到自适应。
基于模板匹配的螺母检测(计算机视觉实验)相关推荐
- 【笔检测】基于模板匹配+PCA笔检测matlab源码
一.简介 1 PCA PCA(Principal Component Analysis)是常用的数据分析方法.PCA是通过线性变换,将原始数据变换为一组各维度线性无关的数据表示方法,可用于提取数据 ...
- 高斯肤色概率模型matlab,基于肤色模型与模板匹配的人脸检测研究
摘要:本文提出了一种基于肤色模型与模板匹配的人脸检测方法.基于YCbCr色彩空间的高斯概率模型,对肤色进行相似度计算和二值化分割,采用形态学对二值化后的图像去噪处理,随后又利用人脸先验知识进一步排除非 ...
- python opencv数字识别_基于模板匹配的手写数字识别(python+opencv)
智能计算课第一周的实验是做基于模板匹配的手写数字识别,光听见就很感兴趣,于是决定认真做做这个实验,本实验基于python3+opencv的python版本,所用到的知识都比较简单,基本上边学边做,技术 ...
- 基于模板匹配和遗传算法的人眼定位
基于模板匹配和遗传算法的人眼定位 余甜甜,唐普英(电子科技大学光电信息学院,四川成都6l0054) 摘要:文中提出了一种利用模板匹配与遗传算法相结合的人眼定位算法.根据人脸几何特征将人脸分为几个特征区 ...
- 基于模板匹配的车牌识别算法,输出数字和英文字母
目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 车牌识别是计算机视觉领域中的一个重要问题,其目的是从图像中自动识别出车辆的车牌信息.基于模板匹配的车牌识别算法是一种常见的方法,其基本思想 ...
- python信用卡客户_Python开发之基于模板匹配的信用卡数字识别功能
环境介绍 python 3.6 + OpenCV 3.4.1.15 原理介绍 首先,提取出模板中每一个数字的轮廓,再对信用卡图像进行处理,提取其中的数字部分,将该部分数字与模板进行匹配,即可得到结果. ...
- 基于模板匹配的知识图谱问答系统
基于模板匹配的知识图谱问答系统 一,什么是基于知识图谱的问答(KBQA)? KBQA–knowledge base question answering,通过对问题进行语义理解及解析,通过知识库进行查 ...
- 一种基于模板匹配的图像配准方法
01 前言 如下图所示,有时候参考图像与浮动图像的灰度区别很大,但是它们又有某一个小区域比较相似,这种情况下直接通过特征点匹配或形变优化来配准的效果并不理想. 这个时候我们可以尝试使用模板匹配的方法来 ...
- 基于模板匹配的数字识别
基于模板匹配的数字识别,将标准的8*16像素的数字0123456789读取,二值化,对每个数字进行等分区域分割,统计每个区域内的黑色像素点的个数,即为特征初值.采用欧式距离的模板匹配法. z//基于模 ...
- 基于模板匹配方法的机场飞机起飞-目标检测
文章目录 1. 模板匹配方法的定义 2. 标注软件labelme 标注以及数据解析裁剪模板 2.1 labelme简介 2.2 labelme标注的json文件解析 3. 基于Opencv pytho ...
最新文章
- Python中的Numpy模块(1,numpy创建)
- ❤️六W字《计算机基础知识》(八)(建议收藏)❤️
- BZOJ 1007 [HNOI2008]水平可见直线 ——半平面交 凸包
- 拓端tecdat|决策树算法建立电信客户流失模型
- 管理感悟:对事又对人
- 高中单招计算机基础知识题库,2015单招考试计算机基础知识题库
- 阿里云网站备案-变更备案问题如何解决
- 7.15周三晚8点,dotnet课堂全新起航,张善友/陈计节/刘腾飞我们一起来聊聊abp的故事...
- 到底是什么决定了二极管的最高工作频率?
- 大菠萝?Pinia已经来了,再不学你就out了
- 几种常见开源软件授权协议
- Static Single Assignment(SSA)
- 湖南科技大学2018年C语言程序设计实验题——问题 J: 成绩统计
- 大器晚成总比一事无成要强
- Codeforces 1132F
- c语言滤出是个最小值,经典滤波算法及C语言程序
- 一个字符导致oracle安装出现ora-12154
- 微信小程序云开发路由模块真机调试报错
- 5行代码带你爬取 “2021福布斯排行榜“,看看中国都有哪些人?
- matlab实指数序列,matlab入门篇正弦信号实指数信号和复指数信号的仿真