图像模板匹配算法(MATLAB)

模板匹配是一种用于在图像中定位和识别对象的技术。它的基本思想是:

  1. 提取图像中的一个子图像作为“模板”(template)。这个子图像通常包含我们感兴趣的目标对象。

  2. 在整个原始图像上,逐点比较模板和原始图像的相似度。相似度通常用归一化的交叉相关(Normalized Cross Correlation, NCC)来度量。

  3. 当相似度达到最大时,原始图像中的该位置就是模板的匹配位置。也就是我们要找的目标对象的位置。

主要的步骤包括:

  1. 获取模板图像:先从原图像中裁剪包含目标的子图像作为模板图。

  2. 在原图像上滑动模板,计算每个位置的相似度:用模板图像在原图像上逐步滑动,每个位置计算模板图和原图的重叠区域的相似度。常用的相似度度量方法是归一化的交叉相关(NCC)。

  3. 寻找最佳匹配:相似度最大的位置即为最佳匹配位置,对应模板图像在原图像的位置。

  4. 设置相似度阈值:只有相似度大于某一阈值的匹配结果才是有效的。

模板匹配简单高效,应用广泛,但只适用于目标变形不大的情况。当目标发生旋转、缩放等变换时,效果会下降。这时可以考虑改进的模板匹配方法或其他更advanced的方法。

MATLAB代码如下:

clc;close all;clear all;warning off;%清除变量
rand('seed', 100);
randn('seed', 100);
format long g;

% im1=imread('1face.bmp');% 读入模板图像
% im2=imread('eye.bmp');%读入测试图像

im1=imread('S.jpg');
im2=imread('letters.jpg');


result=matchfun(im1,im2);

figure;
subplot(1,3,1);
imshow(im1);
title('模板');%显示模板
subplot(1,3,2);
imshow(im2);
title('测试图像');%显示测试图像
subplot(1,3,3);
imshow(result);
title('匹配结果');

function result=matchfun(image1,image2)
%*********************************************************
%如果是三维图像就转换为二维灰度图像
if size(image1,3)==3
    image1=rgb2gray(image1);
end
if size(image2,3)==3
    image2=rgb2gray(image2);
end
% 通过图片的尺寸判断哪个是测试图片哪个是模板
if size(image1)>size(image2)
    Target=image1;
    Template=image2;
else
    Target=image2;
    Template=image1;
end
% 取得两幅图片的尺寸
[r1,c1]=size(Target);
[r2,c2]=size(Template);
% 模板的均值
image22=Template-mean(mean(Template));%X-E(X)

%两幅图像的相关性
M=[];%相关系数 矩阵
for i=1:(r1-r2+1)%横向搜索
    for j=1:(c1-c2+1)%纵向搜索
        Nimage=Target(i:i+r2-1,j:j+c2-1); %区域的选取,r2,c2为选取的大小
        Nimage=Nimage-mean(mean(Nimage));  %Y-E(Y)
        corr=sum(sum(Nimage.*image22));%E(X)*E(Y)取和与Cov(X,Y)成正比
        warning off
        M(i,j)=corr/(sqrt(sum(sum(Nimage.^2)))*sqrt(sum(sum(image22.^2))));%X与Y均方差的积
    end
end
% 在测试的图像中标注出目标的位置
result=plotbox(Target,Template,M);

function result=plotbox(Target,Template,M);
%**********判断目标的位置并标记************
[r1,c1]=size(Target);
[r2,c2]=size(Template);

[r,c]=max(M);%r每一列的最大值,c每列最大值所在的行数,都为一维矩阵
[r3,c3]=max(max(M));%r3 矩阵中的最大值,c3最大值所在的列数
%确定最大值点的坐标
i=c(c3);%行数
j=c3;%列数
result=Target;
%画上边的横线
for x=i:i+r2-1
   for y=j%一个像素点的宽度
       result(x,y)=255;%画线设置成白色
   end
end
%画下边的横线
for x=i:i+r2-1
   for y=j+c2-1
       result(x,y)=255;
   end
end
%画左边的竖线
for x=i
   for y=j:j+c2-1
       result(x,y)=255;
   end
end
%画右边的竖线
for x=i+r2-1
   for y=j:j+c2-1
       result(x,y)=255;
   end
end

程序结果如下:

完整代码:https://download.csdn.net/download/corn1949/88794750

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity | 资源热更(YooAsset AB)

目录 一、AssetBundle 1. 插件AssetBundle Browser 打AB包 (1)Unity(我用的版本是2020.3.8)导入AssetBundle Browser (2)设置Prefab (3)AssetBundleBrowser面板 2. 代码打AB包…

Unity类银河恶魔城学习记录1-9 PlayerWallSilde源代码 P36

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Player.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; us…

【30秒看懂大数据】数据指标

公众号:知幽科技 PS:本文属专栏第24篇 简单说 数据指标是指对企业经营数据转化为可量化、可衡量、可对比、可预测的一个度量或者维度同称。 举例理解 你在小区门口开了一家馒头店。 开业第一天你算了下一共卖了50个馒头,一共收款100元&#xff0…

通过手写简易版RPC理解RPC原理

RPC是什么 所谓的RPC其实是为了不同主机的两个进程间通信而产生的,通常不同的主机之间的进程通信,程序编写需要考虑到网络通信的功能,这样程序的编写将会变得复杂。RPC就来解决这一问题的,一台主机上的进程对另外一台主机的进程发…

乐意购项目前端开发 #6

一、商品详情页面 代码模版 创建Detail文件夹, 然后创建index.vue文件 <script setup> import { getDetail } from "/api/goods/index"; import { ref, onMounted } from "vue"; import { useRoute } from "vue-router"; import { useCar…

2024/2/3学习记录

微信小程序 小程序中组件的分类 视图容器 view 普通视图区域&#xff0c;类似于 div 常用来实现页面的布局效果。 scroll-view 可滚动的视图区域&#xff0c;常用来实现滚动列表效果 swiper 和 swiper-item 常用 swiper 组件的常用属性 轮播图容器组件和轮播图item组件 基…

【CSS】常见样式总结

一. 溢出隐藏 1.1 单行文本溢出 .content{max-width:200px; /* 定义容器最大宽度 */overflow:hidden; /* 隐藏溢出的内容 */text-overflow:ellipsis; /* 溢出部分...表示 */white-space: nowrap; /* 确保文本在一行内显示 */ }问题&#xff1a;display:flex 和 ellipsis 冲…

Win7 Python入手教程(超简单)

前言 因为最近想学习AI&#xff0c;所以准备开始用python&#xff0c;所以为了照顾和我一样用win7且认为网上的教程难以操作的人&#xff0c;所以的算水写一篇博客。 正文 安装步骤&#xff1a; 打开python官网。&#xff08;会有一点慢&#xff0c;要耐心。&#xff09; …

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注意力机制)

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测&#xff08;SE注意力机制&#xff09; 目录 回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测&#xff08;SE注…

C#,哥伦布数(Golomb Number)的算法与源代码

1 哥伦布数&#xff08;Golomb Number&#xff09; 哥伦布数&#xff08;Golomb Number&#xff09;是一个自然数的非减量序列&#xff0c;使得n在序列中正好出现G&#xff08;n&#xff09;次。前几个15的G&#xff08;n&#xff09;值为&#xff1a;1 2 2 3 3 4 4 4 5 5 5 6…

线阵相机参数介绍之帧加行触发

要点&#xff1a; 了解行触发与帧触发的区别 了解线阵相机帧行触发的参数设置 目标&#xff1a; 能够独立进行帧行触发的配置 1.帧、行触发的区别 帧触发控制的是一张图像开始拍摄的位置 行触发控制的是图像中每一行开始拍摄的位置。

极速上手:使用Jmeter轻松实现N种参数化

参数化的方式&#xff1a; 一、使用用户自定义变量 一种方式&#xff1a;直接在测试计划中添加用户自定义变量 另外一种方式&#xff1a;配置元件——用户自定义变量 示例&#xff1a;用户自定义变量&#xff0c;登录手机号码 在接口请求的时候&#xff0c;进行引用 请求之后&…

【iOS ARKit】3D 人体姿态估计

与基于屏幕空间的 2D人体姿态估计不同&#xff0c;3D人体姿态估计是尝试还原人体在三维世界中的形状与姿态&#xff0c;包括深度信息。绝大多数的现有3D人体姿态估计方法依赖2D人体姿态估计&#xff0c;通过获取 2D人体姿态后再构建神经网络算法&#xff0c;实现从 2D 到 3D人体…

极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁

文章目录 前言幻兽帕鲁私服详细部署教程查看服务器开始游戏自定义游戏参数配置 前言 行业资讯 《幻兽帕鲁》的火爆对开发商 Pocketpair 来说&#xff0c;代价是巨大的。该游戏的成功让首席执行官沟部拓郎最近在推特上表示&#xff0c;他可能因服务器运营费用而面临破产。据他透…

Matplotlib绘制炫酷散点图:从二维到三维,再到散点图矩阵的完整指南与实战【第58篇—python:Matplotlib绘制炫酷散点图】

文章目录 Matplotlib绘制炫酷散点图&#xff1a;二维、三维和散点图矩阵的参数说明与实战引言二维散点图三维散点图散点图矩阵二维散点图进阶&#xff1a;辅助线、注释和子图三维散点图进阶&#xff1a;动画效果和交互性散点图矩阵进阶&#xff1a;调整样式和添加密度图总结与展…

Backtrader 文档学习-Indicators- TA-Lib

Backtrader 文档学习-Indicators- TA-Lib 1.概述 即使BT提供的内置指标数量已经很多&#xff0c;开发指标主要是定义输入、输出并以自然方式编写公式&#xff0c;还是希望使用TA-LIB。原因: 指标X在指标库中&#xff0c;而不在BT中TA-LIB众所周知的&#xff0c;人们信任口碑…

远程SSH连接树莓派, SSH反向隧道访问树莓派(使用阿里云服务器以及树莓派4b)

使用SSH反向隧道 由于其没有公网IP地址&#xff0c;那么不在同一个内网的其它电脑就无法直接连接到这台树莓派&#xff0c;这个时候内网穿透技术就可以帮助我们克服这个问题 这里使用ubuntu系统, 树莓派4b, 使用端口8999演示 参考 SSH 反向隧道搭建过程-云社区-华为云 (huawei…

架构篇33:传统的可扩展架构模式-分层架构和SOA

文章目录 分层架构SOA小结相比于高性能、高可用架构模式在最近几十年的迅猛发展来说,可扩展架构模式的发展可以说是步履蹒跚,最近几年火热的微服务模式算是可扩展模式发展历史中为数不多的亮点,但这也导致了现在谈可扩展的时候必谈微服务,甚至微服务架构都成了架构设计的银…

【从零开始的rust web开发之路 三】orm框架sea-orm入门使用教程

【从零开始的rust web开发之路 三】orm框架sea-orm入门使用教程 文章目录 前言一、引入依赖二、创建数据库连接简单链接连接选项开启日志调试 三、生成实体安装sea-orm-cli创建数据库表使用sea-orm-cli命令生成实体文件代码 四、增删改查实现新增数据主键查找条件查找查找用户名…

99例电气实物接线及52个自动化机械手动图

给大家分享一些流水线设计中常见的一些结构&#xff0c;这些动态图很直观&#xff0c;有助于大家了解其原理&#xff0c;非常好懂。 1.家庭总电箱接线图 2.经典双控灯接线 3.五孔一开接线 4.电动机点动控制接线&#xff08;不安全&#xff09; 5.电动机自锁接线图&#xff08;…