2016-02-28 158 views
0

我有一個圖像,我試圖標記爲綠色的像素爲0,一切都不綠色爲1.但是,由於像素是在格式(x,y),我不知道如何去做。到目前爲止,我已經加載的圖像和提取的綠色通道,假定它是RGB格式,所以像(0,255,0)如何在Matlab中標記像素?

這是我到目前爲止有:

% read in the image and display to make sure its loading correctly 
    I = imread('Sample.tif'); 
    imshow(I) 
    % extract green color channel 
    green = I(:,:,2); 
    % Extract all green pixels as an array? Then mark them as 0? 

    % Display resulting image 
    imshow(I) 

任何建議或資源在這裏?提前致謝!

+0

不能使用不同的顏色單一的通道,其原因,如果你認爲什麼樣的價值純白將在R,G和B顏色分割爲更通常的RGB沒有這樣做,這將成爲明顯的,但在另一個像HSV的色彩空間。 – nkjt

+0

我明白了,所以在使用'rgb2hsv()'之前我已經轉換爲HSV colorspace,但問題仍然是,我需要在值通道上執行哪些操作來標記像素? –

+0

最終圖像應該是什麼樣子?這聽起來像是你想創建一個新的圖像(最初)爲綠色像素爲0,否則爲1。以這種方式,你會得到一張黑白照片。 – Alessiox

回答

0

我不確定你的問題到底是什麼,但下面的代碼可能會幫助你實現結果。如果您發表評論,我可以改進答案。

0)以RGB格式讀入圖像。

第一種方法:分離出綠色和其他成分(分別繪製出每個成分),並將所有非綠色成分的最終圖表設置爲1.注意:由於所有成分都含有一定量的綠色。

第二種選擇:根據最大貢獻將圖像分爲紅色,綠色或藍色。最後一張圖顯示轉換爲黑白。注意:該算法不是矢量化的,所以如果處理大量/許多圖像,這將會很慢。

I = imread('autumn.tif'); 

IG = I; IG(:,:,[1 3]) = 0; % Green only 
INoG = I-IG; 
INoG1 = INoG; INoG1(abs(INoG1) > 0) = 1; 
       % Possibly what you want? 


% Display resulting images 
subplot(4,2,1) 
imshow(I) 
title('Original'); 

subplot(4,2,2) 
imshow(INoG) 
title('No Green'); 

subplot(4,2,3) 
imshow(IG) 
title('Only Green'); 

subplot(4,2,4) 
imshow(INoG1) 
title('No Green (all 1?)'); 
% Note: There is a bit of each color in every pixel... 
%  => Potential solution: Use major contributor 

% Not vectorized => Slow for large images 
IRGB = I*0; 
for i = 1:size(I,1) 
for j = 1:size(I,2) 
    [~,k] = max(I(i,j,:)); 
    if (size(k) > 1) 
     k = k(1); 
    end 

    IRGB(i,j,k) = 255; 
end 
end 

IRGBG = IRGB; IRGBG(:,:,[1 3]) = 0; % Green only 
IRGBNoG = IRGB-IRGBG; 
BandWNoG = IRGBG(:,:,2); % Possibly what you want? 

% Display resulting images 
subplot(4,2,5) 
imshow(IRGB); 
title('RGB - Original'); 

subplot(4,2,6) 
imshow(IRGBNoG); 
title('RGB - No Green'); 

subplot(4,2,7) 
imshow(IRGBG); 
title('RGB - Only Green'); 

subplot(4,2,8) 
imshow(BandWNoG) 
title('Black and White - No Green'); 
+0

正是我想要做的。我部分得到了你現在在這裏的東西。無論如何,子圖很好地看到每個處理步驟發生了什麼,我可以加我的噪音並繼續,謝謝@PZwan –