RANSAC 估计仿射变换
RANSAC estimating Affine transformation
对于图像拼接应用程序,我获取了描述符的匹配并将其存储在矩阵匹配 2xM 中。我现在想用仿射应用 Ransac,所以我得到了 2x3 矩阵的随机样本,然后我尝试应用代码
[tform,inlier1,inlier2] = estimateGeometricTransform(sample(1,:),sSample(2,:),'affine');
这似乎不起作用,因为它要求我的列为 2,将其转换为 3x2 也不起作用,因为对于仿射我需要 3 个对应点。
也匹配returns只匹配描述符的索引,我怎么能
提取其坐标并将其应用于我的 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');
我没有你的数据来测试这个,也没有你的函数 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))
是对应于 f2(1:2,matches(2,i))
的点。 请double-check这个假设,文档没有指定输出。
你应该可以找到两组点之间的变换如下:
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
。
对于图像拼接应用程序,我获取了描述符的匹配并将其存储在矩阵匹配 2xM 中。我现在想用仿射应用 Ransac,所以我得到了 2x3 矩阵的随机样本,然后我尝试应用代码
[tform,inlier1,inlier2] = estimateGeometricTransform(sample(1,:),sSample(2,:),'affine');
这似乎不起作用,因为它要求我的列为 2,将其转换为 3x2 也不起作用,因为对于仿射我需要 3 个对应点。
也匹配returns只匹配描述符的索引,我怎么能 提取其坐标并将其应用于我的 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');
我没有你的数据来测试这个,也没有你的函数 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))
是对应于 f2(1:2,matches(2,i))
的点。 请double-check这个假设,文档没有指定输出。
你应该可以找到两组点之间的变换如下:
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
。