Я не уверен, что именно вы после этого задаете, но приведенный ниже код может помочь вам в достижении результата. Если оставить комментарий, я могу улучшить ответ.
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');
Вы не можете использовать один канал для отдельных цветов, по причинам, которые станут очевидными, если вы считаете, что значение чистого белого будет иметь в R, G и B. сегментация цвет более обычно делается не в RGB, но в другом цветовом пространстве, таком как HSV. – nkjt
Я вижу, поэтому я перешел в цветовое пространство HSV перед использованием 'rgb2hsv()', но вопрос по-прежнему заключается в том, какую операцию мне нужно выполнять на канале значений для отметки пикселей? –
Как должно выглядеть последнее изображение? Похоже, вы хотите создать новое изображение с (изначально) зеленого пикселя как 0 и 1 в противном случае. Таким образом вы получите черно-белое изображение. – Alessiox