2016-07-25 145 views
3

我正在處理類似於以下的圖像:a cell image,並且我只想提取紅粉色部分。截至目前,我使用img(:,:,1)來提取紅色值,但這會產生一個二進制圖像。我想知道是否有辦法提取「紅色」值並根據其「紅色」或強度程度生成灰度圖像。任何幫助都是極好的。基於一個顏色通道的強度將RGB圖像轉換爲灰度

+0

它不應該產生一個二進制圖像。你爲什麼認爲它是二元的?嘗試'imagesc(img(:,:1))' – Suever

回答

2

您很可能使用imshow顯示結果,它會自動將軸的顏色限制設置在01之間。您的圖像是RGB,紅色通道的值將從0255。因此,如果您只指定一個輸入到imshow,您將得到一個圖像,其中所有值>1將顯示爲白色,並且所有零值均爲黑色。所以你的圖像並不是真正的二進制,它只是出現那種方式

你想要麼imagesc顯示您的圖片,它會自動縮放顏色範圍來匹配數據:

imagesc(img(:,:,1)); 
colormap gray 

或者,您可以指定第二個輸入imshow以使其也擴展到適合你的數據範圍:

imshow(img(:,:,1), []) 

的原因,這是不是當你所有的可視化頻道的問題是,如果你指定的紅色,綠色和藍色通道,這被認爲是真彩色圖像,所有軸色麗米特被忽略。

2

您捕獲的數據將是正確的(並且是灰度),但可視化可能不正確。當試圖想象一個二維矩陣(與你的結果img(:,:,1)),MATLAB應用默認顏色映射,其結果是:

[x,y]=meshgrid(1:200, 1:200); 
z=x.^2.*sin(y/max(y(:))*pi); 
figure;imagesc(z); 

enter image description here

如果你想避免應用jet顏色表,要麼改變顏色表:

colormap('gray') 

enter image description here

或更改2D矩陣成3D一個,明確地指定的顏色顯示(必須是與0之間的值1):

z3d = z(:,:,[1 1 1]); % more efficient than repmat 
z3d = (z3d - min(z(:)))./range(z(:)); % make sure values in range [0; 1] 

enter image description here

你看到條帶在顏色表的版本,因爲默認情況下一個顏色表contains 64 different colors; 3D矩陣版本沒有這個問題,因爲它直接顯示顏色。

2

如果我可以添加到您的問題,在我看來,你只是試圖分離(或組合)分離和可視化的紅色,綠色和藍色fluorofores。我特別認爲這是因爲你提到'粉紅'。

這可能是更好的只是隔離通道:

>> F_red = F; F_red(:,:,[2,3]) = 0; 
>> F_green = F; F_green(:,:,[1,3]) = 0; 
>> F_blue = F; F_blue(:,:,[1,2]) = 0; 
>> F_pink = F; F_pink(:,:,2) = 0; 

這裏有結果的次要情節:

enter image description here

此外,你應該知道,生產的「天真」的方式灰度圖像不會保留人眼所感知的顏色的「亮度」,因爲與「紅色」和「藍色」相同強度的「綠色」實際上將被視爲由更亮的亮度爲人類的眼睛,同樣的「紅色」比「藍色」更亮。 Matlab提供了一個rgb2gray函數,它將rgb圖像轉換爲正確保持亮度的灰度圖像。這與您的純粹的紅色,綠色和藍色轉換無關,但對於「粉紅色至灰度」圖像可能需要考慮一些問題。例如,比較下面的兩張圖片,您會看到細微的對比差異。

>> F_pinktogray_naive = mean(F(:,:,[1,3]), 3); 
>> F_pinktogray_luminance = rgb2gray(F_pink); 

兩個次要情節:

enter image description here

在某種意義上,你可能更關心的左邊(幼稚)之一,因爲你不關心的粉紅的轉換一個灰色的「視覺」,但你更關心的是紅色和藍色的氟化物在灰度圖像上的強度是「可比較的」(因爲它們代表測量值而不是視覺場景)。但在將rgb圖像轉換爲灰度圖時需要牢記這一點。

+0

對不起,爲了澄清,底部圖像是一個灰度圖像,只是用'熱'地圖可視化,我認爲結果比灰色地圖更直觀。此外,圖像是用'imagesc'生成的,這意味着這些值被縮放(即最低爲0,最高爲1)。如果你不關心縮放比例(例如,imshow允許你指定這樣的限制,或者你可以簡單地將灰度通道複製到所有rgb通道,這樣你就有一個灰色'rgb圖像,因此imagesc不會縮放,但會將它們解釋爲rgb)。 –

相關問題