欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

基于空间相关的图像模板匹配及MATLAB实现

发布时间:2024/4/15 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 基于空间相关的图像模板匹配及MATLAB实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

应用背景:机器的模式识别所要解决的问题,就是用机器代替人去认识图像和找出一幅图像中人们感兴趣的目标物。如何找到目标物即图像的区域呢,这里介绍在空间域使用模板在图像中寻找与模板匹配的区域。

基本原理:在空间滤波中,相关是指滤波器模板移过图像并计算每个像素位置的灰度乘积之和的过程。基于相关的图像模板匹配过程类似于滤波过程,设图像f(x,y)的大小为M*N和模板子图像w(x,y)的大小为J*K,则f与w的相关表示为:

             (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 plaincopy
  • 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实现的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。