数字图像处理——相关检测

原理:利用模板与图像做相关运算得到相关值矩阵,相关值最大的位置即检测出的目标位置。相关值计算公式:

Matlab代码:

clear,clc;
car = imread('car.png');
mask = imread('wheel.png');
[h1,w1] = size(car);
[h2,w2] = size(mask);

car_ext = zeros(h1+h2-1,w1+w2-1);  % car_ext为对car进行边缘补零后的图像
h2_2 = floor(h2/2);   % 模板的半高
w2_2 = floor(w2/2);   % 模板的半宽
m1 = h2_2+1;      % 原图像car在边缘补零后的图像car_ext中的起始行位置
m2 = h2_2+h1;
n1 = w2_2+1;      % 原图像car在边缘补零后的图像car_ext中的起始列位置
n2 = w2_2+w1;
car_ext(m1:m2,n1:n2) = car;

g = zeros(h1+h2-1,w1+w2-1);  % g记录相关值
m = zeros(h1+h2-1,w1+w2-1);  % 模板
% 滑动窗口进行相关滤波
for i = m1:m2
    for j = n1:n2
        sum1 = 0;
        sum2 = 0;
        m(i-h2_2:i+h2_2,j-w2_2:j+w2_2) = mask;
        for u = i-h2_2:i+h2_2
            for v = j-w2_2:j+w2_2
                sum1 = sum1+car_ext(u,v)*m(u,v);  % 模板和原图像对应位置相乘后累加
                sum2 = sum2+car_ext(u,v)^2;  % sum2为图像内容
            end
        end
        g(i,j) = sum1/sum2;   % sum2对sum1进行调整,避免检测出错
    end
end
g = g(m1:m2,n1:n2);   % 相关值矩阵去除边缘的0
g = im2uint8(mat2gray(r));
tmp = max(g(:));    % 找出相关值矩阵的最大值
[y,x] = find(g==tmp); % 找出最大值的坐标

figure,imshow(car);
figure,imshow(g);

测试图像:

模板:

运行结果:

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值