2016-09-25 91 views
0

相同颜色的组斑点我拥有所有图像中的每个白色像素的[x, y]值的阵列。我想基本上将这些像素分组为单独的数组,如果某些白色像素断开连接,并且是不同于其他组的一部分。JS - 基于距离

换句话说,设想与一种白色斑点的左侧和另一白色斑点,以(通过任何白色像素连接相隔一定距离的和不)右侧的红色图像。

我想所有白色像素的原始阵列分成两个阵列,一个表示用于第一斑点白色像素和一个表示用于所述第二白色像素。这只是一个例子,可能会有一大块白色或许多较小的白色斑点 - 它需要能够适用于所有情况。

我的第一个想法是使用DBSCAN作为https://github.com/uhho/density-clustering的一部分来识别单独的“blob”或“clusters”,但不幸的是,这不起作用,因为我的图像可能很大,并且可能有超过100,000个像素需要群集(我需要这个操作在几ms内运行)。

有一些其他的方式来处理这个或使用更快的聚类算法?

回答

0

聚类这里是错误的工具 - 它太复杂(因而昂贵)。

你所寻找的被称为连接组件。 DBSCAN基于连接的组件,但功能超出您的需求。

+0

好的 - 你知道JavaScript中连接组件的任何实现吗?此外,我不是简单地试图看看这些斑点是否连接 - 我试图看看它们在所有点上是否至少隔开了“n”的距离。换句话说,如果blob是凹的,并且在某个点它非常接近另一个blob(由'n'确定),那么它们不应该被认为是两个斑点,而应该被认为是一个斑点。 – abagshaw

+0

图书馆的建议在这里是题外话题。另外,我绝对不会为此使用库,而是直接在问题上实现它,因此它是快速和可定制的。这不是什么难事,你需要一个图书馆。事实上,一个库可能意味着您必须花费更多的精力将数​​据从模型A转换为模型B并返回,而不仅仅是您自己实现算法。 –

+0

好的确定这是有道理的。然而,再次将基于距离的“斑点”或“组件”分类为独立的问题?我只能想到在将斑点分开后,通过欧几里德距离将所有外边缘点与所有其他外边缘点进行比较,但我会认为效率非常低。 – abagshaw