%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')
Local Feature Detection and Extraction
最新推荐文章于 2021-09-22 14:10:44 发布