当前位置: 首页 > news >正文

《深度学习》OpenCV轮廓检测 模版匹配 解析及实现

目录

一、模型匹配

1、什么是模型匹配

2、步骤

1)提取模型的特征

2)在图像中查找特征点

3)进行特征匹配

4)模型匹配

3、参数及用法

1、用法

2、参数

1)image:待搜索对象

2)templ:模板对象

3)method:计算匹配程度的方法

• TM_SQDIFF:平方差匹配法

• TM_CCORR:相关匹配法

• TM_CCOEFF:相关系数匹配法

• TM_SQDIFF_NORMED:归一化平方差匹配法

• TM_CCORR_NORMED:归一化相关匹配法

• TM_CCOEFF_NORMED:归一化相关系数匹配法

3、代码实现

运行结果为:

二、模型匹配总结

1、概念

2、主要流程

 1)选择合适的模型

 2)准备训练数据

 3)划分训练集和验证集

 4)初始化模型参数

 5)模型训练和调整

 6)模型评估

 7)模型选择

 8)模型应用


一、模型匹配

1、什么是模型匹配

        模型匹配是一种通过在图像中查找识别特定形状或物体的方法。模型匹配基于图像中的特征点,并尝试找到与预定义的模型或样本最匹配的图像区域。

2、步骤

        1)提取模型的特征

                对于模型或样本图像,使用特征提取算法(如SIFT、SURF或ORB)来检测和描述关键点和特征描述符。

        2)在图像中查找特征点

                对于待匹配的图像,同样使用相同的特征提取算法来检测和描述关键点和特征描述符。

        3)进行特征匹配

                通过计算模型特征点和待匹配图像中特征点之间的距离或相似度,找到最合适的匹配点。

        4)模型匹配

                根据特征匹配的结果,通过应用各种匹配算法(如RANSAC)来估算模型在图像中的位置和姿态。

3、参数及用法

        1、用法
cv2.matchTemplate(image, templ, method, result=None, mask=None)

        2、参数
                1)image:待搜索对象
                2)templ:模板对象
                3)method:计算匹配程度的方法
                        • TM_SQDIFF:平方差匹配法

                                该方法采用平方差来进行匹配,匹配越好,值越小,匹配越差,值越大

                        • TM_CCORR:相关匹配法

                               该方法采用乘法操作,数值越大表示匹配程度越好

                        • TM_CCOEFF:相关系数匹配法

                                数值越大表示匹配程度越好

                        • TM_SQDIFF_NORMED:归一化平方差匹配法

                                匹配越好,值越小,匹配越差,值越大

                        • TM_CCORR_NORMED:归一化相关匹配法

                                数值越大表明匹配程度越好

                        • TM_CCOEFF_NORMED:归一化相关系数匹配法

                                数值越大表明匹配程度越好

3、代码实现
import cv2
kele = cv2.imread('kele.png')  # 导入模版图片
template = cv2.imread('template.png')  # 导入模型图片
cv2.imshow('kele',kele)
cv2.imshow('template',template)
cv2.waitKey(0)h,w = template.shape[:2]  # 获取模型高度和宽度
res = cv2.matchTemplate(kele,template,cv2.TM_CCOEFF_NORMED)  # 对模版和模型进行匹配,cv2.TM_CCOEFF_NORMED为匹配程度的方法,返回匹配结果的矩阵,其中每个元素表示该位置与模板的匹配程度
# cv2.minMaxLoc可以获取矩阵中的最小值和最大值,以及最小值的索引号和最大值的索引号
min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)   # 获取矩阵中最小值、最大值、最小值位置的索引号、最大值位置的索引号
top_left = max_loc
bottom_right = (top_left[0] + w,top_left[1] + h)
kele_template = cv2.rectangle(kele,top_left,bottom_right,(0,255,0),2)    # 绘制矩形,图像为kele,左上角坐标为top_left,右下角坐标为bottom_right,绘制矩形的颜色为绿色,线条粗细为2cv2.imshow('kele_template',kele_template)
cv2.waitKey(0)

运行结果为:

二、模型匹配总结

1、概念

        模型匹配(Model Fitting)是指将机器学习模型与训练数据进行拟合,使模型能够从数据中学习到最佳的参数或规律。模型匹配是机器学习中一个关键的步骤,它决定了模型的准确性和泛化能力。

        模型匹配的主要目标是通过调整模型的参数或超参数,使得模型能够更好地拟合训练数据,并且在未见过的数据上具有较好的预测能力。

2、主要流程

 1)选择合适的模型

        根据问题的特点和数据的性质,选择合适的机器学习模型。常见的模型包括线性回归、逻辑回归、决策树、支持向量机、神经网络等。

 2)准备训练数据

        将原始数据进行预处理和特征工程,包括数据清洗、特征选择、特征缩放等,以便于模型的学习和训练。

 3)划分训练集和验证集

        将原始数据划分为训练集和验证集。训练集用于模型的学习和参数调整,验证集用于评估模型的性能和选择最佳的参数。

 4)初始化模型参数

        对模型的参数进行初始化,可以使用随机初始化或者根据经验设置。

 5)模型训练和调整

        使用训练集中的数据对模型进行训练,并通过调整参数或超参数来优化模型的性能。常见的优化算法包括梯度下降、随机梯度下降、牛顿法等。

 6)模型评估

        使用验证集中的数据对训练好的模型进行评估,计算评价指标如准确率、精确率、召回率、F1分数等。

 7)模型选择

        根据模型在验证集上的表现选择最佳的模型,可以根据评价指标或交叉验证等方法进行选择。

 8)模型应用

        经过模型匹配和选择后,将最佳的模型应用到测试集或实际数据中进行预

        需要注意的是,模型匹配是一个迭代的过程,需要多次调整参数和模型结构,直到得到满意的结果。同时,模型匹配也需要考虑过拟合和欠拟合问题,以及如何平衡模型的复杂性和泛化能力。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • QT信号槽原理是什么,如何去使用它?
  • [前端][JS]html中js不同位置的区别
  • 87-java 可轮询锁和定时锁
  • Vue3图片上传报错:Required part ‘file‘ is not present.
  • HarmonyOS NEXT应用开发性能实践总结
  • 有没有视频加字幕免费软件?值得收藏的10款字幕编辑软件推荐!
  • Java教程:SE进阶【十万字详解】(上)
  • 【Java】方法2_Java的参数传递机制
  • 88、k8s之pv+pvc
  • Hadoop运行jps没有datanode节点【已解决】
  • 探索 AI 代理驱动的汽车保险索赔 RAG 管道。
  • 第二期: 第四节, 裸机编程 LED 汇编代码。
  • Java企业面试题2
  • HTML5( HTML5 、CSS3) 第一天
  • KV260 进阶开发(PYNQ驱动开发+Pixel Pack)
  • bearychat的java client
  • canvas绘制圆角头像
  • ERLANG 网工修炼笔记 ---- UDP
  • express如何解决request entity too large问题
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript 基本功--面试宝典
  • Median of Two Sorted Arrays
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • python3 使用 asyncio 代替线程
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 如何编写一个可升级的智能合约
  • 如何设计一个比特币钱包服务
  • 算法之不定期更新(一)(2018-04-12)
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 自动记录MySQL慢查询快照脚本
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 带你开发类似Pokemon Go的AR游戏
  • #### golang中【堆】的使用及底层 ####
  • (31)对象的克隆
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (java)关于Thread的挂起和恢复
  • (k8s中)docker netty OOM问题记录
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (转)c++ std::pair 与 std::make
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)平衡树
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .bat批处理(六):替换字符串中匹配的子串
  • .Net Core 微服务之Consul(二)-集群搭建
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net的DataSet直接与SQL2005交互
  • .net分布式压力测试工具(Beetle.DT)
  • .NET基础篇——反射的奥妙
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2