normxcorr2
是 MATLAB 中的一个函数,用于计算两个矩阵的归一化互相关。这个函数在图像处理和计算机视觉中特别有用,尤其是在模板匹配和对象识别方面。
函数签名
在 MATLAB 中,normxcorr2
函数的基本调用形式如下:
C = normxcorr2(TEMPLATE, A) | |
C = normxcorr2(TEMPLATE, A, 'none') | |
C = normxcorr2(TEMPLATE, A, 'biased') | |
C = normxcorr2(TEMPLATE, A, 'unbiased') | |
C = normxcorr2(TEMPLATE, A, 'coeff') |
参数说明
TEMPLATE
:模板图像矩阵。A
:待搜索的图像矩阵,normxcorr2
会在图像A
中搜索与TEMPLATE
相似或匹配的区域。- 第三个参数是可选的,用于指定归一化的类型,有以下选项:
'none'
:不进行归一化(默认)。'biased'
:使用有偏估计进行归一化,即用N
(模板中的元素数量)进行归一化。'unbiased'
:使用无偏估计进行归一化,即用N-1
进行归一化。'coeff'
:返回相关系数,取值范围在-1
到1
之间。
返回值
C
:是一个矩阵,表示TEMPLATE
和A
之间的互相关。矩阵C
的大小是A
的大小加上TEMPLATE
的大小减一。例如,如果A
的大小是Ma x Na
,TEMPLATE
的大小是Mt x Nt
,则C
的大小是(Ma + Mt - 1) x (Na + Nt - 1)
。
MATLAB代码
clc;close all;clear all;warning off;%清除变量
rand('seed', 500);
randn('seed', 300);
format long g;% 读取图像
image = imread('chepai3.png');
template = imread('chepai2.png'); % 假设图像和模板都是灰度图像
% 如果不是,需要转换为灰度图像
if size(image, 3) == 3 image = rgb2gray(image);
end
if size(template, 3) == 3 template = rgb2gray(template);
end % 计算归一化互相关
C = normxcorr2(template, image); % 找到最大相关系数的位置
[~, maxIndex] = max(C(:));
[maxY, maxX] = ind2sub(size(C), maxIndex); % 显示匹配结果
figure, imshow(C, []), hold on
plot(maxX, maxY, 'rx', 'MarkerSize', 15, 'LineWidth', 2)
title('Matched Position');onion=template;
peppers=image;
c = normxcorr2(onion,peppers);
figure, surf(c), shading flat
[ypeak, xpeak] = find(c==max(c(:)));
yoffSet = ypeak-size(onion,1);
xoffSet = xpeak-size(onion,2);
hFig = figure;
hAx = axes;
imshow(peppers,'Parent', hAx);
imrect(hAx, [xoffSet+1, yoffSet+1, size(onion,2), size(onion,1)]);
程序结果: