【问题标题】:RANSAC estimating Affine transformationRANSAC 估计仿射变换
【发布时间】:2018-09-02 12:30:36
【问题描述】:

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

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

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

Matches 也只返回匹配描述符的索引,我怎么能 提取其坐标并将其应用于我的 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');

【问题讨论】:

  • 您应该输入两个矩阵,每个矩阵代表点的坐标。在我看来,您输入的是向量而不是矩阵。请显示您的所有代码,如this page on to create a minimal, complete example 中所述。
  • vl_ubcmatch 给出匹配描述符在 2x562 矩阵中的索引,分数是它们之间的距离。我正在尝试使用匹配的索引来估计仿射变换。但是,estimateGeometric 给我的错误是它不是 Mx2,如果我将它设为 Mx2,它不再有 3 个点,所以仿射不起作用。

标签: matlab sift ransac


【解决方案1】:

我没有你的数据来测试这个,也没有你的函数vl_sift 和vl_ubcmatch。所以请原谅任何问题。

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

我还将假设 matches 是一个 2xN 数组,其中 matches(1,:) 表示到 f 和 matches(2,:) 是到 f2 的索引,因此 f(1:2,matches(1,i)) 是对应于 @987654334 的点@。 请仔细检查此假设,文档未指定输出。

你应该可以找到两组点之间的变换如下:

matched_f = f(1:2,matches(1,:))';
matched_f2 = f2(1:2,matches(2,:))';
[tform,inlier1,inlier2] = estimateGeometricTransform(matched_f,matched_f2,'affine');

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

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

【讨论】:

  • 这会抛出错误 Expected MATCHEDPOINTS1 to be of size Mx2, but it is size 562x128.
  • 这意味着d 和d2 不是我想象的那样。您需要在问题中添加更多信息。 v1_sift 返回什么?我什至不知道你从哪里得到这个功能......
  • @Hiya54Huy :我已经调整了答案,但即使在阅读文档后我仍然不确定。您必须从这里进行测试和调试。例如,当我在答案的原始版本中说我假设d 的大小时,您很容易测试这个假设,因为您的 MATLAB 工作区中有d。查看变量以及它们可能意味着什么,查看函数调用和它们的期望,并尝试直到你让它工作!
  • 似乎没有更多错误了!非常感谢您的耐心和帮助。
猜你喜欢
  • 2018-04-09
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 2016-01-13
  • 2013-07-04
相关资源
最近更新 更多