基于matlab的可乐标签模板匹配

1 建模思路

1.图像预处理

  • 如果目标图像和模板图像是彩色的(即RGB图像),则将它们转换为灰度图像,以便在单通道上进行匹配。
  • 使用rgb2gray函数进行灰度化。

2.获取模板大小

  • 使用size函数获取模板图像的高度(templateHeight)和宽度(templateWidth)。

3.初始化差异矩阵

  • 创建一个矩阵differenceMatrix,其大小为目标图像大小减去模板大小再加1(因为不需要考虑模板边界之外的位置)。
  • 这个矩阵将用于存储目标图像中每个可能位置与模板图像之间的平方差之和。

4.遍历目标图像

  • 使用两个嵌套的for循环遍历目标图像中的每个可能位置(即模板可以放置的每个位置)。

5.提取子图像

  • 对于目标图像中的每个可能位置,提取一个与模板大小相同的子图像。

6.计算平方差之和

  • 对于每个子图像和模板图像,计算它们之间的平方差之和。
  • 平方差之和的公式为:

        其中,S(i,j) 是目标图像中子图像在位置 (i,j) 的像素值,T(i,j) 是模板图像在相应位置的像素值,templateHeight 和 templateWidth 分别是模板图像的高度和宽度。这个公式用于计算目标图像中每个可能位置与模板图像之间的平方差之和,以找到最佳匹配位置。

7.找到最佳匹配位置

  • differenceMatrix中找到最小平方差的位置,即最佳匹配位置。
  • 使用min函数找到最小值及其索引。

8.绘制匹配结果

  • 使用imshow函数显示目标图像。
  • 使用rectangle函数在最佳匹配位置绘制一个绿色矩形框。

        通过这种方式,代码实现了基于平方差之和的模板匹配算法,用于在目标图像中找到与模板图像最匹配的位置。

2 代码

% 读取目标图像和模板图像  
targetImage = imread('image.png'); % 替换为您的目标图像文件  
templateImage = imread('template.png'); % 替换为您的模板图像文件  
figure;
subplot(1,2,1),imshow(targetImage);
title('原始目标图像');
subplot(1,2,2),imshow(templateImage);
title('原始模板图像');
% 转换为灰度图像(如果它们不是)  
if size(targetImage, 3) == 3  targetImage = rgb2gray(targetImage);  
end  
if size(templateImage, 3) == 3  templateImage = rgb2gray(templateImage);  
end  % 获取模板图像的大小  
[templateHeight, templateWidth] = size(templateImage);  % 初始化一个矩阵来存储每个位置的平方差之和  
differenceMatrix = zeros(size(targetImage) - [templateHeight-1, templateWidth-1]);  % 遍历目标图像中的每个可能位置  
for y = 1:size(targetImage, 1) - templateHeight + 1  for x = 1:size(targetImage, 2) - templateWidth + 1  % 提取目标图像中当前位置的子图像  subImage = targetImage(y:y+templateHeight-1, x:x+templateWidth-1);  % 计算子图像与模板图像之间的平方差之和  differenceMatrix(y, x) = sum(sum((double(subImage) - double(templateImage)).^2));  end  
end  % 找到最小平方差的位置(即最佳匹配)  
[minVal, minLoc] = min(differenceMatrix(:));  
[bestY, bestX] = ind2sub(size(differenceMatrix), minLoc);  % 绘制匹配到的矩形区域  
figure;
subplot(1,3,1),imshow(targetImage);
title('灰色目标图像');
subplot(1,3,2),imshow(templateImage);
title('灰色模板图像');
subplot(1,3,3),imshow(targetImage); hold on;  
rectangle('Position', [bestX, bestY, templateWidth, templateHeight], 'EdgeColor', 'g', 'LineWidth', 2);  
title('匹配结果');  
hold off;

3 运行结果

图2-1 原始目标图像与原始模板图像

图2-2 模板匹配结果

        为了看清匹配结果,这里对匹配结果图像局部放大如图2-3所示:

图2-3 匹配结果局部放大图

        从图2-3可以看出本文建模比较成功。

4 调整

        这里对目标图像与模板图像不再灰度化直接进行模板匹配,且矩形标记线宽进行微调。

4.1 代码
% 读取目标图像和模板图像  
targetImage = imread('image.png'); % 替换为您的目标图像文件  
templateImage = imread('template.png'); % 替换为您的模板图像文件   % 确保模板图像小于或等于目标图像  
[templateRows, templateCols, ~] = size(templateImage);  
[targetRows, targetCols, ~] = size(targetImage);  
if templateRows > targetRows || templateCols > targetCols  error('模板图像不能大于目标图像');  
end  % 初始化一个存储最小差值和对应位置的变量  
minDiff = Inf;  
bestLoc = [0, 0];  % 遍历目标图像,寻找与模板图像的最佳匹配  
for i = 1:targetRows-templateRows+1  for j = 1:targetCols-templateCols+1  % 提取目标图像中与模板大小相同的子图像  subImage = targetImage(i:i+templateRows-1, j:j+templateCols-1, :);  % 计算子图像与模板图像之间的绝对差值  diff =imabsdiff(subImage, templateImage);  % 计算方差和  sumDiff = sum(diff(:).^2);  % 如果和更小,则更新最小差值和位置  if sumDiff < minDiff  minDiff = sumDiff;  bestLoc = [i, j];  end  end  
end  % 绘制绿色矩形框以显示定位结果  
figure;
subplot(1,3,1),imshow(targetImage);
title('目标图像');
subplot(1,3,2),imshow(templateImage);
title('模板图像');
subplot(1,3,3),imshow(targetImage);  
hold on;  
rectangle('Position', [bestLoc(2), bestLoc(1), templateCols, templateRows], 'EdgeColor', 'g', 'LineWidth', 0.5);  
title('匹配结果');  
hold off;
4.2 运行结果

图4-1 调整模板匹配结果

        这里放大模板匹配结果进行观察如图4-2所示:

图4-2 调整模板匹配结果局部放大图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2000-2022年上市公司数字化转型与绿色创新质量匹配数据(含控制变量)

2000-2022年上市公司数字化转型与绿色创新质量匹配数据&#xff08;含控制变量&#xff09;https://download.csdn.net/download/a519573917/89501000 目录 上市公司数字化转型与绿色创新质量匹配的实证研究 一、引言 二、文献综述 三、实证模型 四、数据来源与描述性统计 …

tomcat8.5在windows下运行出现日志中文乱码

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

Linux 2-Vim使用

1 什么是vi及vim&#xff1f; vi是文本编辑器&#xff1b;vim是程序开发工具。 2 vi的几种模式 1 一般模式&#xff1a;vi <fileName> 就进入命令模式&#xff0c;可以删除或者复制粘贴 2 编辑模式&#xff1a;修改内容 3 命令行模式&#xff1a;最下面一行&#xf…

NetSuite Amount正负符号在Saved Search和DataSet中的不同含义

近期在一个项目中碰到Amount取值的Bug&#xff0c;原因是我们的代码中数据源从Saved Search转为了DataSet&#xff0c;由于这个转换导致了Amount的正负值混乱。今天记录一下。 正负号原则 • Saved Search&#xff0c; Amount的正负需要考虑科目类型。 Amount字段根据科目类型…

昇思25天学习打卡营第10天 | 基于MindNLP+MusicGen生成自己的个性化音乐

基于MindNLPMusicGen生成自己的个性化音乐 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型&#xff08;LM&#xff09;的音乐生成模型&#xff0c;能够根据文本描述或音频提示生成高质量的音乐样本&#xff0c;相关研究成果参考论文《Simple and Controllable …

远程过程调用PRC

简介 远程过程调用&#xff08;Remote Procedure Call, RPC)&#xff0c;是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间的子程序&#xff0c;且不需要考虑交互作用的细节。 RPC是一种服务器&#xff0c;客户端模式&#xff0c;是一个通过发送请…

【效率提升】新一代效率工具平台utools

下载地址&#xff1a;utools uTools这款软件&#xff0c;是一款功能强大且高度可定制的效率神器&#xff0c;使用快捷键alt space(空格) 随时调用&#xff0c;支持调用系统应用、用户安装应用和市场插件等。 utools可以调用系统设置和内置应用&#xff0c;这样可以方便快捷的…

KV260视觉AI套件--PYNQ-DPU

目录 1. 简介 2. DPU 原理介绍 2.1 基本原理 2.2 增强型用法 3. DPU 开发流程 3.1 添加 DPU IP 3.2 在 BD 中调用 3.3 配置 DPU 参数 3.4 DPU 与 Zynq MPSoC互联 3.5 分配地址 3.6 生成 Bitstream 3.7 生成 BOOT.BIN 4. 总结 1. 简介 在《Vitis AI 环境搭建 &…

深入理解TCP协议格式(WireShark分析)

传输控制协议&#xff08;TCP&#xff09;是互联网中最为关键的通信协议之一。了解TCP协议的细节不仅对于网络工程师至关重要&#xff0c;对于任何涉及网络通信的软件开发人员而言都是必备的知识。本文旨在深入探讨TCP协议&#xff0c;从协议的基本概述到其工作机制&#xff0c…

【sqlite3】联系人管理系统

SQLite3实现简单的联系人管理系统 有关sqlite3的基础知识请点击&#xff1a;SQLite3的使用 效果展示&#xff1a; 创建一个名为contacts.db的数据库 首先&#xff0c;我们需要创建一个名为contacts.db的数据库&#xff0c;并建立一个名为"contact"的表&#xff0…

一篇文章理解堆栈溢出

一篇文章理解堆栈溢出 引言栈溢出ret2text答案 ret2shellcode答案 ret2syscall答案 栈迁移答案 堆溢出 unlink - UAF堆结构小提示 向前合并/向后合并堆溢出题答案 引言 让新手快速理解堆栈溢出&#xff0c;尽可能写的简单一些。 栈溢出 代码执行到进入函数之前都会记录返回地…

Android 10.0 关于定制自适应AdaptiveIconDrawable类型的动态日历图标的功能实现系列一

1.前言 在10.0的系统rom定制化开发中,在关于定制动态时钟图标中,原系统是不支持动态日历图标的功能,所以就需要从新 定制动态时钟图标关于自适应AdaptiveIconDrawable类型的样式,就是可以支持当改变系统图标样式变化时,动态日历 图标的背景图形也跟着改变,所以接下来就来…

BGE M3-Embedding 模型介绍

BGE M3-Embedding来自BAAI和中国科学技术大学&#xff0c;是BAAI开源的模型。相关论文在https://arxiv.org/abs/2402.03216&#xff0c;论文提出了一种新的embedding模型&#xff0c;称为M3-Embedding&#xff0c;它在多语言性&#xff08;Multi-Linguality&#xff09;、多功能…

19 解决问题的策略

众所周知&#xff0c;每个学期都会有一个单元“解决问题的策略”。而在此文章&#xff0c;我们会把小学阶段所有策略都进行一一讲解。 每个年级的两个学期中的策略&#xff0c;其实有异曲同工之处。 三年级&#xff1a;从条件和问题出发解决问题四年级&#xff1a;用图表整理…

X射线底片焊缝缺陷检测

实现四种焊缝缺陷的检测和分割处理。

Python:谈谈常规滤波器(带通、低通、高通、带阻)的用法

一、滤波器的作用 滤波器在信号处理中用于移除或减少信号中的噪声&#xff0c;同时保持信号的某些特性。滤波器通常用于音频、视频和图像处理等领域。滤波器根据其 designed for different purposes and can be divided into several types, such as lowpass filters, highpass…

Pikachu 不安全的文件下载(Unsafe file download)概述 附漏洞利用案例

目录 获取下载链接 修改链接 重新构造链接 拓展 不安全的文件下载概述 文件下载功能在很多web系统上都会出现&#xff0c;一般我们当点击下载链接&#xff0c;便会向后台发送一个下载请求&#xff0c;一般这个请求会包含一个需要下载的文件名称&#xff0c;后台在收到请求…

02.Ambari自定义服务开发-metainfo.xml介绍

文章目录 metainfo.xml 介绍配置说明Hbase metainfo.xml配置说明配置参数详细介绍配置文件样例DORIS metainfo.xml 介绍 ​ 在Ambari自定义开发中&#xff0c;metainfo.xml 配置文件起着至关重要的作用。它用于定义服务的元数据信息&#xff0c;包括服务的版本、组件、执行脚本…

Todesk远程Ubuntu桌面系统100%但是进不去桌面

1、报错情况 如下图所示&#xff0c;用Todesk远程Ubuntu桌面&#xff0c;看到连接100%了&#xff0c;但是进不去桌面 ubuntu系统看起来的话&#xff0c;已经像被远程成功了 我就首先把todesk卸载重新安装了&#xff0c;后面发现还是这样&#xff0c;于是我就找客服去问了&…

Qt之Pdb生成及Dump崩溃文件生成与调试(含注释和源码)

文章目录 一、Pdb生成及Dump文件使用示例图1.Pdb文件生成2.Dump文件调试3.参数不全Pdb生成的Dump文件调试 二、个人理解1.生成Pdb文件的方式2.Dump文件不生产的情况 三、源码Pro文件mian.cppMainWindowUi文件 总结 一、Pdb生成及Dump文件使用示例图 1.Pdb文件生成 下图先通过…