我有三组2d分。我需要做的是找出一个与其他两个相关的位置。 每组都有相同的点,顺序相同。一个是'中立',一个是'最大',第三个是未知的。我需要的是返回0到1之间的单个值,它说明未知集合在其他两个之间的数量。
例如,在图片中:
我会以某种方式获得Set A和Set B之间的'distance'或'weight',然后找出Set C在它们之间的位置。在这个例子中,我预计值约为75%,或0.75。
我已经研究过使用点集注册算法来返回一个比例集以匹配Set C到Set B,但我不相信这是最好的方法。什么方法适合这个问题?我应该搜索哪些算法?
答案 0 :(得分:0)
您可以尝试通过两组之间的简单线性插值来解决这个问题。如果集合之间的过渡确实几乎是线性的,则这是有效的。如果你知道它是其他东西,你可以调整插值函数。
让我们专注于单一点p
。我们知道它在所有集p_A
,p_B
和p_C
中的坐标。然后,我们指定p_C
或多或少是带有参数p_A
的{{1}}和p_B
之间的线性插值(其中t
表示集合A和{{1}代表集B):
t=0
现在的问题是找到一个约为你所有积分的t=1
。
我们可以通过将问题陈述为线性最小二乘问题来解决这个问题。即我们希望最小化所有点的总和残差(上式的左侧和右侧之间的差异):
p_C = (1 - t) * p_A + t * p_B
= p_A - t * p_A + t * p_B
= p_A + t * (p_B - p_A)
p_C - p_A = t * (p_B - p_A)
最佳t
则是:
arg min_t Σ_i (pi_C.x - pi_A.x - t * (pi_B.x - pi_A.x))^2
+ (pi_C.y - pi_A.y - t * (pi_B.y - pi_A.y))^2
如果您的点具有更高的维度,只需使用相同的模式添加新维度。