下面的代码显示了两个图像之间的对应特征点。我怎样才能获得这些点的像素指数?例如,我想获得位于第一个图像中的第一个特征点的像素索引(行和列)。
I1=rgb2gray(imread('peau.jpg'));
I2=imresize(imrotate(I1,-20),1.2);
points1=detectSURFFeatures(I1);
points2=detectSURFFeatures(I2);
[f1,vpts1] = extractFeatures(I1, points1);
[f2,vpts2] = extractFeatures(I2, points2);
[indexPairs,cv] = matchFeatures(f1, f2) ;
matchedPoints1 = vpts1(indexPairs(:, 1));
matchedPoints2 = vpts2(indexPairs(:, 2));
figure; ax = axes;
showMatchedFeatures(I1,I2,matchedPoints1,matchedPoints2);
legend(ax,'Matched points 1','Matched points 2');
答案 0 :(得分:1)
vpts1
和vpts2
分别为您提供在第一张图像和第二张图像之间检测到的要素点。 indexPairs
会返回N x 2
矩阵,其中每一行都会显示相应图像之间匹配的两个要素。每行的第一个元素为您提供索引,其中vpts1
中哪个要素与vpts2
中的相应要素相匹配,后者是该行的第二个元素。
如果您想要每个功能的实际像素位置,则需要分别访问Location
和vpts1
的{{1}}字段,因此:
vpts2
每个矩阵都会显示loc1 = vpts1.Location;
loc2 = vpts2.Location;
矩阵,其中第一列表示N x 2
或水平坐标,第二列表示x
或垂直坐标。现在,要获得两个图像之间匹配的第一个特征的像素坐标,只需执行以下操作:
y
pt1_loc = loc1(indexPairs(1,1),:);
pt2_loc = loc2(indexPairs(1,2),:);
和indexPairs(1,1)
确定第一个和第二个图像之间匹配的特征的相应索引,因此您可以使用这些索引索引两个图像本身的位置数组。