سلام.
یک تمرین کامل در مورد نحوه استفاده از استخراج ویژگی SURF را برای شما قرار میدم که فقط بجای surf نام توابع را به sift تبدیل کنید.
دانلود
clear all;
close all;
clc
خواندن تصویر اولیه
imgRef = imread('D:\MATCH\Ref.bmp');
خواندن تصویر مقصد
imgTemp = imread('D:\MATCH\Temp.bmp');
نمایش هر دو تصویر
figure(1),imshow(imgRef);
figure(2),imshow(imgTemp);
خاکستری کردن تصاویر در 8 سطح
Isrc =rgb2gray(imgRef);
Ides =rgb2gray(imgTemp);
نمایش تصاویر خاکستری
figure,imshow(Isrc);
figure,imshow(Ides);
لبه یابی تصاویر با فیلتر sobel
Isrcbw=edge(Isrc,'sobel');
نمایش تصویر لبه یابی شده مبدا
figure,imshow(Isrcbw);
لبه یابی تصویر مقصد با فیلتر Prewitt
Idesbw=edge(Ides,'prewitt');
نمایش تصویر لبه یابی شده مقصد
figure,imshow(Idesbw);
استخراج طول و عرض تصویر اولیه
[Isrch,Isrcw] = size(Isrc);
تبدیل هر بعد به اعداد صحیح و تقسیم بر چهار به منظور تشکیل گرید 4*4
Isrch = uint8(Isrch / 4) ;
Isrcw = uint8(Isrcw / 4) ;
گرید بندی تصویر اولیه سیاه و سفید با رنگ سفید
تقسیم چهارتایی در ردیف ها و تقسیم چهارتایی در ستون ها
Isrcbw(Isrch:Isrch:end,:,:) = 1
Isrcbw(:,Isrcw:Isrcw:end,:) =1;
نمایش تصویر گرید شده اولیه
figure, imshow(Isrcbw(
همین روند برای تصویر مقصد و نمایش آن
[Idesh,Idesw] = size(Ides) ;
Idesh = uint8(Idesh / 4) ;
Idesw = uint8(Idesw / 4) ;
Idesbw(Idesh:Idesh:end,:,:) = 1;
Idesbw(:,Idesw:Idesw:end,:) =1;
figure, imshow(Idesbw);
تشخیص نقاط خاص تصویر سیاه و سفید اولیه
pointsSrc = detectSURFFeatures(Isrc) ;
تشخیص نقاط خاص تصویر سیاه و سفید ثانویه
pointsDes = detectSURFFeatures(Ides) ;
استخراج فیچرهای تصویر اولیه از روی نقاط خاص
[featuresSrc,pointsSrc] = extractFeatures(Isrc, pointsSrc) ;
استخراج فیچرهای تصویر مقصد از روی نقاط خاص
[featuresDes,pointsDes] = extractFeatures(Ides, pointsDes) ;
مقایسه فیچرهای دو تصویر
boxPairs = matchFeatures(featuresSrc, featuresDes);
نمایش نقاط مقایسه شده
matchedSrc = pointsSrc(boxPairs(:, 1), :);
matchedDes = pointsDes(boxPairs(:, 2), :);
figure;
showMatchedFeatures(Isrc, Ides, matchedSrc, ...
matchedDes, 'montage');
% t = 1 ;
% for ii = 1:4
% for jj = 1:4
% r = (ii-1) * m4 + 1 ;
% c = (jj - 1) * n4 + 1 ;
% POINTS = detectSURFFeatures(j(r:r+m4, c:c+n4)) ;
% [features,validPoints] = extractFeatures(I,points);
% figure(3)
% POINTS.plot() ;
% t = t + 1 ;
% end
% end
%POINTS = detectSURFFeatures(j(3:295,960:1440)) ;
%extractFeatures(I,points)
%POINTS = detectSURFFeatures(I,Name,Value) ;