我越来越多地使用skimage坐标系来迷惑自己。因此,当我使用skimage加载图像时,图像会加载形状(行,列),其中行从图像的顶部到底部运行,列从左到右运行。
现在,我正在尝试估计一组图像关键点之间的投影转换,如果我理解正确,则必须以更传统的(x,y)格式提供点,其中x是列,y是行。如果是这样,我需要置换积分。但是,我有时会使用这两种惯例获得合理的,有时相当垃圾的结果,并想知道使用哪一种。
最终,应该使用ransac返回的转换将使用skimage.transform.warp函数来扭曲图像。
[更新]:使用一些代码。
这是用法,我很困惑:
from skimage.transform import ProjectiveTransform
from skimage.measure import ransac
from skimage.feature import plot_matches
from skimage.feature import match_descriptors
# target, source are 2-d images.
# Compute SIFT is done outside skimage but returns c, r indexes.
k_1, d_1 = compute_sift(target) # c, r indexing
k_2, d_2 = compute_sift(source)
# Match SIFT features and descriptors
matches = match_descriptors(d_1, d_2)
# This is all still c, r indexing
fp = k_1[[[0], [1]], matches[:, 0]] # This is shape (2, n)
tp = k_2[[[0], [1]], matches[:, 1]] # This is shape (2, n)
model_estimate, inliers = ransac((tp.T, fp.T), ProjectiveTransform,
min_samples=4, residual_threshold=10,
max_trials=100)
因此,RANSAC的输入采用(c,r)形式。因为,这是在内部使用变换对象,我猜这是正确的。目前,我得到了(c,r)和(r,c)两者的混合结果,所以我想消除这里的不确定性并验证我做的是正确的事。
如果我还可以澄清一件事。 skimage使用命名法(src,dst),如果我对任何变换对象使用estimate()方法,返回的变换T是否具有关系是真的
T * src_coords = dst_coords
我正在使用版本0.10.1的skimage。