【问题标题】:Finding rigid 2D transformation of a small set寻找一个小集合的刚性二维变换
【发布时间】:2018-04-03 03:56:05
【问题描述】:

我想仅通过平移和旋转将少量线条拟合到大量线条(从图像中获得)。

将线转换为点后,我尝试使用 cv::estimateAffinePartial2D() 来完成这项工作,但它有一个断言,要求源集和目标集的大小相同。

想法为什么会这样? 除了遍历所有可能的子集之外,关于如何做到这一点的建议?

【问题讨论】:

    标签: c++ opencv vision


    【解决方案1】:

    将线转换为点后[...]

    您只需从较小的线集中提取更多点(或从较大的线集中提取更少的点,或两者的组合),以便为estimateAffinePartial2D() 提供相同数量的点。等效地,假设您想要一个仿射 xform,您可以根据一些空间均匀分布(假设均匀分布的异常值)伪随机抽取较大的点源。

    【讨论】:

    • 我在小集上有 5 行,在大集有大约 100 多行,你确定这里推荐重采样吗?为什么仍然存在相同大小的断言?
    • @EranGeva 要求同样大小,请咨询估测AffinePartial2D作者;此外,该要求甚至没有记录在功能文档中。无论如何,它是 Levenberg–Marquardt 求解器所要求的。
    • @EranGeva 重新采样,您有责任确保重新采样不会影响结果。
    • 当我进入 github.com/opencv/opencv/blob/master/modules/calib3d/src/… 末尾的代码时,我找到了断言。我会试试你的建议,谢谢。
    • @EranGeva 我明白了,LM 和 RANSAC 求解器都断言输入大小相等;无论如何,请注意,即使 opencv 支持不同大小的输入,在内部它总是会重新采样它们(显式或隐式),因此可能会引入一些偏差。不管你怎么说,你仍然需要特别小心,以避免在给定大小非常不同的依赖/独立集的情况下使结果产生偏差。
    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 2022-10-06
    • 2018-09-22
    相关资源
    最近更新 更多