數字影象處理——相關檢測
阿新 • • 發佈:2018-11-21
原理:利用模板與影象做相關運算得到相關值矩陣,相關值最大的位置即檢測出的目標位置。相關值計算公式:
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);
測試影象:
執行結果: