基于空间相关的图像模板匹配及MATLAB实现
2017-05-06 20:51
971 查看
应用背景:机器的模式识别所要解决的问题,就是用机器代替人去认识图像和找出一幅图像中人们感兴趣的目标物。如何找到目标物即图像的区域呢,这里介绍在空间域使用模板在图像中寻找与模板匹配的区域。基本原理:在空间滤波中,相关是指滤波器模板移过图像并计算每个像素位置的灰度乘积之和的过程。基于相关的图像模板匹配过程类似于滤波过程,设图像f(x,y)的大小为M*N和模板子图像w(x,y)的大小为J*K,则f与w的相关表示为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/13/2c1d4ed02ba880dda4529121a37bab57)
(1)
其中,x=0,1,2,3.....N-K,y=0,1,2.....M-J,计算相关c(x,y) 的过程就是在图像f(x,y) 中逐像素地移动模板子图像w(x,y) 的原点像素,在每一次移动的过程中根据式(1)计算每个像素位置的相关。对式(1)的向量表达式进行归一化后如下式所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/13/1c91c1d029db8cb0e152f0aec392dd69)
(2) MATLAB实现如下: [plain] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
clear;
reource_p=imread('F:\picture\pattern.bmp');
reource_p_sub=imread('F:\picture\sub_pattern.bmp');
[m,n]=size(reource_p);
[m0,n0]=size(reource_p_sub);
result=zeros(m-m0+1,n-n0+1);
vec_sub = double( reource_p_sub(:) );
norm_sub = norm( vec_sub );
for i=1:m-m0+1
for j=1:n-n0+1
subMatr=reource_p(i:i+m0-1,j:j+n0-1);
vec=double( subMatr(:) );
result(i,j)=vec'*vec_sub / (norm(vec)*norm_sub+eps);
end
end
%找到最大相关位置
[iMaxPos,jMaxPos]=find( result==max( result(:)));
figure,
subplot(121);imshow(reource_p_sub),title('匹配模板子图像');
subplot(122);
imshow(reource_p);
title('标记出匹配区域的原图'),
hold on
plot(jMaxPos,iMaxPos,'*');%绘制最大相关点
%用矩形框标记出匹配区域
plot([jMaxPos,jMaxPos+n0-1],[iMaxPos,iMaxPos]);
plot([jMaxPos+n0-1,jMaxPos+n0-1],[iMaxPos,iMaxPos+m0-1]);
plot([jMaxPos,jMaxPos+n0-1],[iMaxPos+m0-1,iMaxPos+m0-1]);
plot([jMaxPos,jMaxPos],[iMaxPos,iMaxPos+m0-1]);
运行结果如下图所示
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/13/ccc68cee553afb0cab84408bcff77935)
原文链接:http://blog.csdn.net/yi_tech_blog/article/details/70199021
(1)
其中,x=0,1,2,3.....N-K,y=0,1,2.....M-J,计算相关c(x,y) 的过程就是在图像f(x,y) 中逐像素地移动模板子图像w(x,y) 的原点像素,在每一次移动的过程中根据式(1)计算每个像素位置的相关。对式(1)的向量表达式进行归一化后如下式所示:
(2) MATLAB实现如下: [plain] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
clear;
reource_p=imread('F:\picture\pattern.bmp');
reource_p_sub=imread('F:\picture\sub_pattern.bmp');
[m,n]=size(reource_p);
[m0,n0]=size(reource_p_sub);
result=zeros(m-m0+1,n-n0+1);
vec_sub = double( reource_p_sub(:) );
norm_sub = norm( vec_sub );
for i=1:m-m0+1
for j=1:n-n0+1
subMatr=reource_p(i:i+m0-1,j:j+n0-1);
vec=double( subMatr(:) );
result(i,j)=vec'*vec_sub / (norm(vec)*norm_sub+eps);
end
end
%找到最大相关位置
[iMaxPos,jMaxPos]=find( result==max( result(:)));
figure,
subplot(121);imshow(reource_p_sub),title('匹配模板子图像');
subplot(122);
imshow(reource_p);
title('标记出匹配区域的原图'),
hold on
plot(jMaxPos,iMaxPos,'*');%绘制最大相关点
%用矩形框标记出匹配区域
plot([jMaxPos,jMaxPos+n0-1],[iMaxPos,iMaxPos]);
plot([jMaxPos+n0-1,jMaxPos+n0-1],[iMaxPos,iMaxPos+m0-1]);
plot([jMaxPos,jMaxPos+n0-1],[iMaxPos+m0-1,iMaxPos+m0-1]);
plot([jMaxPos,jMaxPos],[iMaxPos,iMaxPos+m0-1]);
运行结果如下图所示
原文链接:http://blog.csdn.net/yi_tech_blog/article/details/70199021
相关文章推荐
- 基于空间相关的图像模板匹配及MATLAB实现
- 基于空间相关的图像模板匹配及MATLAB实现
- 图像处理常用算法GPU实现三:基于模板匹配的边缘检测
- Matlab模板匹配实现图像运动估计(频域实现)
- 图像处理常用算法GPU实现三:基于模板匹配的边缘检测
- QT 实现图像处理-傅立叶变换、傅立叶反变换、平滑、锐化与模板匹配
- Matlab图像处理学习笔记(三):基于匹配的目标识别
- matlab实现将彩色图像(R,G,B)色分量的直方图匹配,并计算其相关性
- 图像处理之基于NCC模板匹配识别
- 基于HSV色彩空间变换的阴影检测算法——MATLAB实现
- 基于vs2010和opencv的图像转化到hsv空间再emd匹配
- Matlab图像处理学习笔记(三):基于匹配的目标识别
- 【图像处理】基于OpenCV底层实现的直方图匹配
- 图像处理之基于NCC模板匹配识别
- 基于PCNN的图像分割的matlab实现
- MATLAB中实现图像的空间域滤波和频率域滤波
- 实现图像复原的相关MATLAB程序举例
- 基于HSV 颜色空间的图像检索matlab代码
- 基于VC与Matlab的混合编程实现图像的三维显示
- opencv基于直方图实现图像检索匹配