首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RANSAC估计仿射变换

RANSAC估计仿射变换
EN

Stack Overflow用户
提问于 2018-03-23 18:32:19
回答 1查看 1.2K关注 0票数 0

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

tform,inlier1,inlier2 =estimateGeometricTransform(样本1,:),sSample(2,:),‘仿射’;

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

匹配也只返回匹配描述符的索引,如何提取其坐标并将其应用于tform转换?

代码语言:javascript
复制
[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');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-23 22:01:30

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

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

我还将假设matches是一个2xN数组,其中matches(1,:)被指示为f,而matches(2,:)f2的索引,因此f(1:2,matches(1,i))是对应于f2(1:2,matches(2,i))的一个点。-请反复检查这个假设,文档没有指定输出.

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

代码语言:javascript
复制
matched_f = f(1:2,matches(1,:))';
matched_f2 = f2(1:2,matches(2,:))';
[tform,inlier1,inlier2] = estimateGeometricTransform(matched_f,matched_f2,'affine');

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

有关更多信息,请参见estimateGeometricTransform

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49456280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档