2016-07-14 8 views
0

これは、Kのアルゴリズムのサンプルコードです。私は、このKから最終的な画像を取得する必要があり適用方法イメージ処理でのしきい値処理

k = 5; 
[Centroid,new_cluster]=kmeans_algorithm(inv_trans_img,k); 

    for i_loop = 1:k 
     cluster = zeros(size(inv_trans_img)); 
     pos = find(new_cluster==i_loop); 
     cluster(pos) = new_cluster(pos); 
     figure; imshow(cluster,[]);title('K-means');   
    end 

は、アルゴリズムを意味し、私はprocess.Iは以下のようにそれをやった閾値化のために、そのイメージを渡す必要があります。

tumour_image=cluster; 

n = 512; 
binarized_img = zeros(n,n); 
sort_val = sort(tumour_image(:)); 
    mid_val = ceil(length(sort_val)/2); 
    threshold = tumour_image(mid_val); 
    binarized_img(find(tumour_image>=threshold)) = 1; 
    binarized_img(find(tumour_image<threshold)) = 0; 
    imshow(binarized_img);title('binarized image'); 

しかし、今問題は、白い画像のみが結果として来ていることです。これを解決するにはどうすればよいですか。

答えて

1

あなたのしきい値は次のようになります。

threshold = sort_val(mid_val); 

あなたがソートされた値は、ないtumour_imageの中心要素の中央値を取得する必要があります。

@NeilSlaterは、コメントに言及しているように、既存のコードから全面白画像を取得するのは、元画像から黒色のピクセルを選択したことになります。画像全体がその画素の値以上である。

ピクセルの大部分が0である画像の場合、これは結果として全面白画像を与えます。これを回避する1つの方法で、現在行っていることに最も類似しているのは、ゼロでないピクセルの中央値をとることです。

mid_val = ceil((find(sort_val, 1)+length(sort_val))/2); 

また、興味のあるクラスタがわかっている場合は、単にそれらのクラスタだけを保持することができます。問題の

binarized_image = tumour_image >= 3; % keep clusters 3 and above 
+0

OPのコードは、おそらく偶然に正確にしきい値 –

+0

@NeilSlaterとして黒画素を選びました。私はおそらくそれを追加する必要があります、ありがとう。 :) – beaker

+0

返事をありがとうが、それでも、私は以前と同じ結果を得ています。 – temp

関連する問題