2015-11-27 22 views
2

下面的代码显示了两个图像之间的对应特征点。我怎样才能得到这个点的像素指数?例如,我想要将位于第一个图像中的第一个特征点的像素索引(行和列)。与特征点检测相关的像素索引

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'); 

enter image description here

回答

1

vpts1vpts2给你分别在第一和第二图像之间检测到的特征点。 indexPairs返回一个N x 2矩阵,其中每行给出您在对应图像之间匹配哪两个特征。每行的第一个元素会为您提供索引,其中vpts1中的功能与vpts2(该行的第二个元素)中的对应功能相匹配。

如果你想每个功能的实际像素位置,你需要分别访问的vpts1vpts2Location领域,所以:

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)indexPairs(1,2)确定的是第一和第二图像之间的匹配的特征对应的指数,让你用这些指标以索引到两个图像本身的位置数组中。

+0

非常感谢你rayryeng –

+0

不客气。如果您不再需要帮助,请考虑接受我的答案。这可以通过点击我帖子顶部的复选标记图标来完成,在向上和向下投票按钮的左下方。祝你好运! – rayryeng