2016-09-25 3 views
0

画像内の各白いピクセルのすべての[x, y]値の配列を持っています。私はいくつかの白いピクセルが切断され、他のグループとは異なるグループの一部である場合、基本的にこれらのピクセルを別々のアレイにグループ化したいと考えています。JS - 距離に基づいて同じ色のブロブをグループ化する

つまり、左側に1つの白い塊と右側にもう一方の白い塊(ある距離で区切られ、白いピクセルで接続されていない)を持つ赤い画像を想像してください。

すべての白いピクセルの元の配列を2つの配列に分割したいと考えています.1つは最初のBLOBの白いピクセルを表し、もう1つは2番目のBLOBの白いピクセルを表します。これはほんの一例に過ぎず、1つの大きな白い塊またはより小さな小さな白い塊が存在する可能性があります。すべてのケースのシナリオで作業できる必要があります。

https://github.com/uhho/density-clusteringの一部としてDBSCANを使用して別の「ブロブ」または「クラスタ」を特定することが最初の考えでしたが、残念ながら画像が大きくなり、クラスタリングが必要な画像が大きくなる可能性があります(私はこの操作を数ミリ秒で実行する必要があります)。

これにアプローチする方法や、より高速なクラスタリングアルゴリズムを使用する方法はありますか?

答えて

0

ここでクラスタリングは間違ったツールです。複雑すぎるため(高価なため)

あなたが探しているものは接続されたコンポーネントとして知られています。 DBSCANは接続されたコンポーネントに基づいていますが、必要以上に機能します。

+0

あなたはjavascriptで接続されたコンポーネントの実装について知っていますか?また、私は単にブロブが接続されているかどうかを確認しようとしているだけではありません - 私はそれらがすべての点で少なくとも「n」の距離だけ離れているかどうかを確認しようとしています。言い換えれば、ブロブが凹状であり、ある点で他のブロブに非常に近い(「n」によって決定される)場合、それらは2つのブロブとみなすべきではなく、1つと考えるべきである。 – abagshaw

+0

図書館の推奨事項は、トピック外の質問です。また、ライブラリを使用することはありませんが、代わりに問題に直接実装するので、高速でカスタマイズが可能です。図書館が必要な場所は難しいことではありません。実際、ライブラリはおそらく、モデルAからモデルBへとデータを変換するために、より多くの努力を払わなければならないことを意味します。 –

+0

それは意味があることを確認します。しかし、「ブロブ」または「コンポーネント」を距離に基づいてユニークなものとして別の問題に分類していますか?私は、ブロブが分離されると、すべての外側のエッジ点をユークリッド距離で他のすべての外側のエッジ点と比較することを考えることができますが、それは非常に非効率的であると思います。 – abagshaw

関連する問題