組織病理学的医用画像にk-meansクラスタリングアルゴリズムを適用して、ピクセルをクラスに分類しています。k-meansを適用する場合はすべて問題ありませんが、小さな問題があります。k-means関数(matlabで使用可能)を何度も実行すると、画像のピクセルが毎回異なる色で表示されます。k-means関数を何度も適用するときに、ピクセルの色を同じにすることはできますか?
卒業生、
サファア
組織病理学的医用画像にk-meansクラスタリングアルゴリズムを適用して、ピクセルをクラスに分類しています。k-meansを適用する場合はすべて問題ありませんが、小さな問題があります。k-means関数(matlabで使用可能)を何度も実行すると、画像のピクセルが毎回異なる色で表示されます。k-means関数を何度も適用するときに、ピクセルの色を同じにすることはできますか?
卒業生、
サファア
k-meansはランダム化されたアルゴリズムです。実行するたびに異なる結果が返されます。ただし、他のクラスタリングアルゴリズムでは、意図した意味(色など)へのクラスターのマッピングを見つける必要があります。
ランダムジェネレーターを修正するか、初期手段を手動で選択することでチートできます(Matlabは使用していませんが、何らかの形でサポートされていると思います)。そうすれば、結果はより安定しますが、それでも必ずしも画像間で比較できるとは限りません。
この機能にMatlabを使用したことはありません。しかし、Kmeans クラスタリングの結果は、最初の中心点の選択に基づいていると思います。おそらく、Matlab 関数は K 個の初期ピクセルをランダムに選択します。これは、毎回異なる結果が得られたことを説明している可能性があります。
Matlab kmeans関数には start という名前のパラメーターがあり、それを使用して開始シードを定義できます。
start 、シードと呼ばれることもある初期クラスター重心位置を選択するために使用されるメソッド。
ドキュメントによると、デフォルト値は
'sample' X から k 個の観測を無作為に選択します (既定)。
他のオプションがありますが、マトリックスオプションのみがランダムではありません。この場合、重心の開始位置の行列 k 行 p 列を定義する必要があります。
以下の例を参照してください。matlab のドキュメントから取得し、ここで変更します。
X = [randn(100,2)+ones(100,2);...
randn(100,2)-ones(100,2)];
opts = statset('Display','final');
k = 2;
startPositions = [0.01 0.01 ; -0.01 -0.01];
[idx,ctrs] = kmeans(X,k,...
'Distance','city',...
'Options',opts,...
'Start',startPositions ...
);
plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(ctrs(:,1),ctrs(:,2),'kx',...
'MarkerSize',12,'LineWidth',2)
plot(ctrs(:,1),ctrs(:,2),'ko',...
'MarkerSize',12,'LineWidth',2)
legend('Cluster 1','Cluster 2','Centroids',...
'Location','NW')
データ自体がランダムであるため、クラスターの中心が変化するように見えることに注意してください。データを static に変更すると、クラスター センターも静的になります。