RANSAC估计仿射变换

时间:2018-03-23 18:32:20

标签: matlab sift ransac

对于图像拼接应用程序,我获取了描述符的匹配并将其存储在匹配2xM的矩阵中。我现在想用仿射来应用Ransac,所以我的随机样本是2x3矩阵,然后我尝试应用代码

[tform,inlier1,inlier2] = estimateGeometricTransform(sample(1,:),sSample(2,:),'affine');

这似乎不起作用,因为它要求我的列为2,将其转换为3x2也不起作用,因为对于仿射我需要3点对应。

匹配也只返回匹配描述符的索引,我该怎么做 提取其坐标并将其应用于我的tform转换?

[f,d] = vl_sift(image1);
[f1,d2] = vl_sift(image2);
[matches, scores] = vl_ubcmatch(d, d2) ;

ranMatch = randperm(size(matches,2),3); 
sample = matches(:,ranMatch);
[tform,inlier1,inlier2] = 
estimateGeometricTransform(sample(1,:),sample(2,:),'affine');

1 个答案:

答案 0 :(得分:0)

我没有您的数据来测试此功能,也没有您的功能vl_siftvl_ubcmatch。所以请原谅任何问题。

根据documentationff2包含vl_sift返回的点的坐标,大小为4xM(可能有不同的M),前两行是x和y坐标。

我还假设matches是一个2xN数组,其中matches(1,:)表示f,而matches(2,:)f2的索引,这样{ {1}}是与f(1:2,matches(1,i))对应的点。 请仔细检查此假设,文档未指定输出。

您应该能够找到两组点之间的转换,如下所示:

f2(1:2,matches(2,i))

这将使用所有匹配的点,并且还将丢弃异常值。

有关详细信息,请参阅documentation to estimateGeometricTransform