像素指数与特征点检测有关

时间:2015-11-27 22:50:06

标签: matlab image-processing matlab-cvst

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

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 个答案:

答案 0 :(得分:1)

vpts1vpts2分别为您提供在第一张图像和第二张图像之间检测到的要素点。 indexPairs会返回N x 2矩阵,其中每一行都会显示相应图像之间匹配的两个要素。每行的第一个元素为您提供索引,其中vpts1中哪个要素与vpts2中的相应要素相匹配,后者是该行的第二个元素。

如果您想要每个功能的实际像素位置,则需要分别访问Locationvpts1的{​​{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)确定第一个和第二个图像之间匹配的特征的相应索引,因此您可以使用这些索引索引两个图像本身的位置数组。