2016-07-20 24 views
0

グレースケール画像(uint16)を白黒画像に変換したい。画像I以下グレースケール画像をBW画像に変換する

[level, ] = graythresh(I); 
I_bw  = im2bw(I, level); 

は:レベルが等しい enter image description here

注こと: enter image description here

私は画像I_bw結果は以下のようにすることが可能であるかを理解していませんgraythresh(I)を呼び出した後に0にします。

EDIT:元の画像を含む.matファイルをアップロードしました。

file
+0

がありますあなたは正しい「私」を使用していると確信していますか?あなたが提供したイメージを使って私は '0.5137'のレベルを取得します:' I = imread( 'http://i.stack.imgur.com/Vch35.jpg'); level = graythresh(I); im2bw(I、レベル); ' – Suever

+0

私は確信しています。私は生のものではなく.JPGのバージョンをアップロードしました。 .figファイルをアップロードできますか? – Alessandro

+0

それでは、どうすれば何をテストできますか?作業している画像をアップロードしてください。 – Suever

答えて

1

理由は、レベル= 0

load Image.mat 

I = z; 
figure;imshow(I, []); 

[level, ] = graythresh(I); %level = 0 
I_bw  = im2bw(I, level); 
figure;imshow(I_bw);impixelinfo 

次のコードは動作します
doubleIを変換し、[0、1]の範囲に正規化。

load Image.mat 

I = z; 
figure;imshow(I, []); 

I = double(I)/double(max(I(:))); %Convert to double, and divide by maximum value - set range to [0, 1]. 

[level, ] = graythresh(I); 

I_bw  = im2bw(I, level); 
figure;imshow(I_bw);impixelinfo 

結果:次のコードは、同様に動作
enter image description here

load Image.mat 

I = z; 
figure;imshow(I, []); 

I = double(I)/double(max(I(:))); %Convert to double, and divide by maximum value - set range to [0, 1]. 
I = uint16(I*2^16-1); %Expand range to [0, 2^16-1] and convert to uint16. 

[level, ] = graythresh(I); 

I_bw  = im2bw(I, level); 
figure;imshow(I_bw);impixelinfo 

は、元のコードでレベル= 0は、遠くの調査を必要とする理由を理解する...

+0

@Alessandro私は自分の答えを更新しましたが、まだレベル= 0の理由は分かりません。 – Rotem

+0

正解、ありがとうございます! – Alessandro

関連する問題