2016-02-28 4 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

Я вижу, поэтому я перешел в цветовое пространство HSV перед использованием 'rgb2hsv()', но вопрос по-прежнему заключается в том, какую операцию мне нужно выполнять на канале значений для отметки пикселей? –

+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 –

Смежные вопросы