模板匹配(matlab)

Molly_Lu 發表於 2020-11-21

1.模板匹配程式碼

%初始化
clear;
% close all;
% clc;

%對圖片灰度化處理
reource_p=rgb2gray(imread('jietu.png'));
reource_p_sub=rgb2gray(imread('jietumask.png'));

%讀尺寸
[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]);

其中%讀取圖片中的imread(’ ')的圖片名替換為你需要識別的圖片。

reource_p=rgb2gray(imread('jietu.png'));		%為模板匹配的原圖
reource_p_sub=rgb2gray(imread('jietumask.png'));		%為模板匹配的子圖片

2.效果驗證

模板匹配
備註:
1.子圖片需要從原圖擷取,尺寸與原圖擷取部分的尺寸相同。
2.程式碼部分來源於網路,稍作了修改。