1

SURF点的最大簇我有两个图像:确定MatLab中

puppy nose

我一只小狗(现场)和它的鼻子小作物(目标)的大图像为目标和场景收集SURF点,然后匹配它们。

matching SURF points

什么是确定最大的集群匹配的冲浪点最好的办法:我已经显示如下的场景图像上最好的比赛吗?

在这个例子中,所有的点都很好地聚类。但是,在其他一些例子中,我想排除几个异常值。

谢谢。

更新: KDE对我很好。谢谢大家,那很好。

+0

将x和y坐标的中间值作为聚类的中心,包括:某个半径内的所有点或最近点的某个百分比? – gregswiss

+0

我认为这将在小狗的例子(这是我很不好)的工作。我在下面提供了一个更新:一个更好的例子,对于我的问题集有更多的典型异常值。谢谢! –

+0

请更新问题,而不是回答。看看**密度估计**而不是聚类。 –

回答

1

您不需要聚类分析。

想要查找的是最高密度的区域。这可能是真正匹配的地方。

密度估计有许多方法,特别是对于低维度。考虑核密度估计 KDE,如果你能负担得起。

如果您不能负担密度估计,但需要的东西非常快,试试这个:

  1. 在每一个维度,计算中位数。

  2. 将中位数组合成矢量以用作估计。

中位数比这更强大的异常值高于平均值,但另一方面,它本质上是把你的所有点的(健壮)的意思。这将是可以的,除非有在同一图像多个好匹配。那么上面讨论的密度估计会更好。

0

你基本上寻找的是由匹配点引起的密度函数的mode。也就是说,在图像的2D空间中,每个匹配点表示来自图像与“目标”之间匹配的概率函数的“样本”。您正在寻找2D密度函数具有“峰值”的点:这是大多数匹配的中心点。

有一个众所周知的算法来找到给定样本函数的密度函数模式,它被称为Mean shift。将mean-shift应用于图像中匹配的XY坐标(我将使用大小与“目标”大小成比例的圆形或三角形内核),结果应为“目标”中心的坐标“位于图像中。

谷歌快速搜索建议this implementation均值漂移聚类。

注意:请不要与Comaniciu和Meer的mean shift segmentation混淆。