我想做一些类似于在图像分析中使用特征的标准“图像注册”。在
我想找到一个最好的变换,把一组二维坐标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}$
有了这个额外的约束,你就不再解决线性最小二乘问题了,所以你必须使用SciPy的最小化函数之一。最小化的内部部分将建立一个矩阵H:
然后,计算距离
^{pr2}$对所有数据点和误差求和。现在,你有一个成本函数,你可以发送给最小化函数。您可能还希望使用RANSAC,它可以作为
skimage.measure.ransac
来拒绝异常值。在skimage现在在转换模块中提供本机支持。在
http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.estimate_transform
有点比OpenCV容易。有一个涵盖所有用例的广泛的函数集。在
相关问题 更多 >
编程相关推荐