SSD介紹參考:https://blog.csdn.net/hujingshuang/article/details/47759579
Matlab代碼實作:
注:img1,img2為參與特征匹配的影像,corners1,corners2分別為img1,img2上的角點(特征點)
function [count,matched]=match(img1,img2,corners1,corners2)
img1=im2double(img1);img2=im2double(img2);
if size(img1,3)==3
img1_gray=rgb2gray(img1);
else
img1_gray=img1;
end
if size(img2,3)==3
img2_gray=rgb2gray(img2);
else
img2_gray=img2;
end
c1=size(corners1,1);
c2=size(corners2,1);
[m,n]=size(img2_gray);
count=1;
matched=zeros(max(c1,c2),2);
for i=1:c1
d_t=99;
for j=1:c2
if corners2(j,1)>1&&corners2(j,1)<m&&corners2(j,2)>1&&corners2(j,2)<n
d=0;
for x=-1:1
for y=-1:1
d=d+(img1_gray(corners1(i,1)+x,corners1(i,2)+y)-img2_gray(corners2(j,1)+x,corners2(j,2)+y))^2;
end
end
if d<d_t&&d<0.05 % 此處設定閾值,這是多次實驗設定出的閾值
d_t=d;
matched(count,:)=[i,j];
end
end
end
if matched(count,1)~=0
count=count+1;
end
end
count=count-1;
end
測驗結果:
呼叫Matlab自帶Harris角點檢測和匹配函式:
clc;clear;close all;
img1 = imread('figure3.jpg');
img2 = imread('figure4.jpg');
img1_gray = rgb2gray(img1);
img2_gray =rgb2gray(img2);
corners1 = detectHarrisFeatures(img1_gray);
corners2= detectHarrisFeatures(img2_gray);
[features1, corners1] = extractFeatures(img1_gray, corners1);
[features2, corners2] = extractFeatures(img2_gray, corners2);
boxPairs = matchFeatures(features1, features2);
matched1 = corners1(boxPairs(:, 1), :);
matched2 = corners2(boxPairs(:, 2), :);
showMatchedFeatures(img1, img2, matched1,matched2, 'montage');
結果如下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238544.html
標籤:其他
上一篇:大三上學期期末
