用python估计欧几里德变换

2024-05-19 01:14:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一些类似于在图像分析中使用特征的标准“图像注册”。在

我想找到一个最好的变换,把一组二维坐标a转换成另一组B坐标。 但是我想添加一个额外的约束,即转换是“刚性/欧几里得变换”,这意味着没有缩放,只有平移和旋转。 通常允许缩放我会做:

 from skimage import io, transform
 destination = array([[1.0,2.0],[1.0,4.0],[3.0,3.0],[3.0,7.0]])
 source = array([[1.2,1.7],[1.1,3.8],[3.1,3.4],[2.6,7.0]])
 T = transform.estimate_transform('similarity',source,destination)

我相信estimate_transform在引擎盖下解决了一个最小二乘问题。 但我想添加一个限制条件,即不缩放。在

skimage或其他软件包中有什么功能可以解决这个问题吗? 可能我需要用scipy、CVXOPT或cvxpy编写自己的优化问题。 有什么帮助来表达/实现这个优化问题吗?在

编辑: 感谢Stefan van der Walt答案

^{pr2}$

Tags: fromio图像importsource标准transform特征
2条回答

有了这个额外的约束,你就不再解决线性最小二乘问题了,所以你必须使用SciPy的最小化函数之一。最小化的内部部分将建立一个矩阵H:

H = np.array([[np.cos(theta), -np.sin(theta), tx],
              [np.sin(theta), np.cos(theta), ty],
              [0, 0, 1]])

然后,计算距离

^{pr2}$

对所有数据点和误差求和。现在,你有一个成本函数,你可以发送给最小化函数。您可能还希望使用RANSAC,它可以作为skimage.measure.ransac来拒绝异常值。在

skimage现在在转换模块中提供本机支持。在

http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.estimate_transform

有点比OpenCV容易。有一个涵盖所有用例的广泛的函数集。在

相关问题 更多 >

    热门问题