使用Java中的OpenCV对两种形状进行刚性转换

时间:2017-09-13 07:43:30

标签: java opencv rigid-bodies

正如标题所说,我正试图找到一种方法来生成一个转换矩阵,以便最好地对齐两个图像(具有最小误差值的解决方案,使用任意度量计算 - 例如,对应之间所有距离的SAD点)。示例如下: enter image description here

这只是一个例子,外部轮廓可以是任何形状,“孔”可以是任何形状,任何尺寸和任何数字。

用手绘制“来自”图像是为了表明形状不完美,而是从相机获取的图像中提取的轮廓。

似乎我需要的API函数是Video.estimateRigidTransform,但我遇到了几个问题而且我被卡住了:

  1. 变换必须在最强烈的意义上是僵化的,这意味着它不能进行任何缩放,只能进行平移和旋转。

  2. 由于“from”图像中的形状不完美,轮廓中的点数与“To”图像中的点数不同,上述函数需要两组对应点。为了绕过这个,我尝试了另一种方法:我计算了孔和外轮廓的质心,并尝试对齐它们。这里有两个问题:

    • 即使“from”图像中缺少其中一个孔,我也需要对齐。
    • 传递给Video.estimateRigidTransform的两个列表中的点数必须相同,并且无法保证函数findContours在两种形状中都以相同的顺序提供它们。
  3. 我还没有尝试运行一个特征提取器和匹配器来获得一些相应的点,但我对这种方法不太自信,特别是因为“From”图像是一个有不规则的自然图像。
  4. 非常感谢任何想法。

0 个答案:

没有答案