2013-12-13 93 views
0

我必須編寫一個將強度圖像轉換爲黑白圖像的程序。我只是想我可以從原始矩陣,我取的值,並且如果它是上述的平均值,使在另一陣列等於1對應的小區,否則等於零:如何在MATLAB中將灰度圖像轉換爲二進制文件

for x=1:X 
    for y=1:Y 
     if I(x,y)>mean(I(:)) 
      bw(x,y)=1; 
     elseif I(x,y)<mean(I(:)) 
      bw(x,y)=0; 
     end 
    end 
end 
image(bw) 

不幸的是,該圖像我得到的都是黑色的。爲什麼?

我在uint8,順便說一句。 2-D Lena.tiff圖片

+0

uint8表示白色將是255,而不是1. – Junuxx

回答

3

使用imagesc(bw)(而不是image(bw))。這會自動縮放圖像範圍。

另外請注意,您可以通過這個量化的替換所有的代碼,更有效的版本:

bw = double(I>mean(I(:))); 
+0

謝謝!這工作:) – Kaya311

8

使用此:

bw = im2bw(I, graythresh(I)); 

這裏im2bw的文件;

使用imshow(I,[]);,不評估0和255之間的圖像,但min(I(:))max(I(:))編輯

之間

您可以通過任何其它級別更改 graythresh(I)。您仍然可以使用圖像的平均值。 (在0和1之間標準化)。

maxI = max(I(:)); 
minI = min(I(:)); 

bw = im2bw(I,(maxI - mean(I(:)))/(maxI - minI)); 
2

一個問題是,你總是使用mean直到那時。

什麼,你會想要做的就是在循環之前做到這一點:

myMean =平均值(I(:));

然後用myMean代替mean(I(:))以下的所有發生。

使用當前的運行方式肯定會減慢速度,但它不會成爲全黑的原因。

+0

你是什麼distiortion? '我'沒有被覆蓋。這當然是低效的,但它不是一個運行的意思; '意思是(I(:))'每次都是相同的值 –

+0

@LuisMendo你說得對,在這種情況下,我的觀點並不重要。編輯了我的答案。 –

+0

找到意思之前做得快得多。 – Kaya311

相關問題