Local Feature Detection and Extraction

%Display two images.
original = imread('cameraman.tif');
figure;
imshow(original);
%The second image, is the original image rotated and scaled.
scale = 1.3;
J = imresize(original,scale);
theta = 31;
distorted = imrotate(J,theta);%旋轉
figure
imshow(distorted);
%Detecting the matching SURF features is the first step in determining the transform needed to correct the distorted image.
ptsOriginal  = detectSURFFeatures(original);
ptsDistorted = detectSURFFeatures(distorted);
%The detection step found several roughly corresponding blob structures in both images. Compare the detected blob features. 
%This process is facilitated by feature extraction, which determines a local patch descriptor
[featuresOriginal,validPtsOriginal] = ...
            extractFeatures(original,ptsOriginal);
[featuresDistorted,validPtsDistorted] = ...
            extractFeatures(distorted,ptsDistorted);
%Find candidate matches.
indexPairs = matchFeatures(featuresOriginal,featuresDistorted);
%Find point locations from both images.
matchedOriginal  = validPtsOriginal(indexPairs(:,1));
matchedDistorted = validPtsDistorted(indexPairs(:,2));
%Display the candidate matches.
figure
showMatchedFeatures(original,distorted,matchedOriginal,matchedDistorted)
title('Candidate matched points (including outliers)');
%Analyze the feature locations.
[tform, inlierDistorted,inlierOriginal] = ...
            estimateGeometricTransform(matchedDistorted,...
                matchedOriginal,'similarity');
%Display the matching points.
figure
showMatchedFeatures(original,distorted,inlierOriginal,inlierDistorted)
title('Matching points (inliers only)')
legend('ptsOriginal','ptsDistorted')
%Apply the computed geometric transform to the distorted image.
outputView = imref2d(size(original));
recovered  = imwarp(distorted,tform,'OutputView',outputView);
%Display the recovered image and the original image.
figure
imshowpair(original,recovered,'montage')


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章