МАТЛАБ: Как бы я преобразовал массив изображений в черно-белый массив на основе цветов? - PullRequest
2 голосов
/ 22 июня 2011

У меня есть изображение в matlab, прочитанное из файла фильма. Изображение является трехмерным массивом. Как бы я прошел через это изображение и если цвета в основном красные (например, красный> 200 синий <50 зеленый <50) сделать эту часть изображения черной, а другие области белыми? </p>

В конце концов, я хотел бы сделать это для всего видео, но сначала мне нужно понять это!

Ответы [ 2 ]

1 голос
/ 22 июня 2011
img = imread('image.jpg');
r = img(:,:,1);
g = img(:,:,2);
b = img(:,:,3);
iR = r > 200;
iG = g < 50;
iB = b < 50;
img2 = 255*ones([size(img,1) size(img,2)],'uint8');
img2(iR & iG & iB) = 0;

subplot(2,1,1), imshow(img)
subplot(2,1,2), imshow(img2)

enter image description here

В случае проблем с памятью и скоростью вы можете заменить соответствующие строки следующим образом:

img2 = true([size(img,1) size(img,2)]);
img2(iR & iG & iB) = false;
0 голосов
/ 22 июня 2011

Основной случай одного изображения RGB (3D-матрицы) был показан другими :

img = imread('image.png');     %# some RGB image

img2 = ~(img(:,:,1)>200 & img(:,:,2)<50 & img(:,:,3)<50);

Если вы хотите применить это ко всем кадрам фильма (4D-матрица = высота за ширину за цветом за кадром), попробуйте следующее компактное решение:

mov = cat(4, img, img);        %# a sample video of two frames

mov2 = squeeze( ~(mov(:,:,1,:)>200 & mov(:,:,2,:)<50 & mov(:,:,3,:)<50) );
...