1

本当に何をしているのかわからscipy.cluster.vqない!!

ウィキペディアではClustering、境界検出またはオブジェクト認識のためにデジタル画像を個別の領域に分割するために使用できると述べています。
他のサイトや本ではclustering、類似した画像のグループを見つけるために画像をクラスタリングする方法を使用できると書かれています。
私は画像処理に興味があるので、私は本当に何であるかを完全に理解する必要がありclusteringます。

では、画像での
使用に関する簡単な例を誰かに教えてもらえますか?scipy.cluster.vq

4

2 に答える 2

3

によって実行されるクラスタリングの種類は、scipy.cluster.vq間違いなく後者(類似した画像のグループ)の種類です。

に実装されている唯一のクラスタリングアルゴリズムscipy.cluster.vqK-Meansアルゴリズムです。これは通常、入力データをn次元ユークリッド空間の点として扱い、その空間を分割して、新しい入力データを「例xは最も似ている」と言って要約できるようにします。重心y」。重心は、入力データの典型的な例と考えることができます。ベクトル量子化は、表示される各新しい画像の100ピクセルすべてを記憶する代わりに、新しい画像が最も似ている典型的な例を指す単一の整数を記憶できるため、簡潔な、または圧縮された表現につながります。

小さなグレースケール画像がたくさんある場合:

>>> import numpy as np
>>> images = np.random.random_sample((100,10,10))

つまり、100個の10x10ピクセルの画像があります。それらがすでにすべて同じような明るさとコントラストを持っていると仮定しましょう。scipy kmeansの実装では、フラットなベクトルが必要です。

>>> images = images.reshape((100,100))
>>> images.shape
(100,100)

次に、K-Meansアルゴリズムをトレーニングして、新しい着信画像を10個のクラスターのいずれかに割り当てることができるようにします。

>>> from scipy.cluster.vq import kmeans, vq
>>> codebook,distortion = kmeans(images,10)

最後に、10個のクラスターの1つに割り当てたい5つの新しい画像があるとします。

>>> newimages = np.random.random_samples((5,10,10))
>>> clusters = vq(newimages.reshape((5,100)),codebook)

clusters5つの例のそれぞれに最も一致する重心の整数インデックスが含まれます。

これは一種のおもちゃの例であり、作業している画像の対象オブジェクトがすべて中央に配置されていない限り、素晴らしい結果は得られません。関心のあるオブジェクトは大きな画像のどこにでも表示される可能性があるため、通常、小さな画像の「パッチ」の重心を学習し、それらを大きな画像と畳み込み(多くの異なる場所で比較)、並進不変を促進します。

于 2012-10-09T21:57:46.110 に答える
0

2 つ目は、クラスタリングとは何かということです。ある程度類似している(画像の可能性がある) オブジェクトをグループ化します。クラスタリングは純粋な画像技術ではありません。

単一の画像を処理する場合、たとえば色に適用できます。これは、画像の色数を減らすための非常に優れたアプローチです。色とピクセル座標でクラスター化する場合、類似した色を持ち、互いに近いピクセルをグループ化するため、画像のセグメンテーションにも使用できます。ただし、これはクラスタリングのアプリケーション ドメインであり、純粋なクラスタリングではありません。

于 2012-10-09T23:50:51.997 に答える