Как преобразовать цветное изображение в оттенки серого в MATLAB?

Я пытаюсь реализовать алгоритм компьютерного зрения и хочу попробовать его на наборе изображений. Картинки все цветные, но я не хочу иметь с этим дело. Я хочу преобразовать их в оттенки серого, которых достаточно для тестирования алгоритма.

Как преобразовать цветное изображение в оттенки серого?

Я читаю это с:

x = imread('bla.jpg');

Есть ли какой-либо аргумент, который я могу добавить к imread, чтобы читать его как оттенки серого? Можно ли изменить x на оттенки серого после прочтения?


person Nathan Fellman    schedule 22.11.2009    source источник


Ответы (7)


Используйте rgb2gray, чтобы убрать оттенок и насыщенность (т. е. преобразовать в оттенки серого). Документация

person Donnie    schedule 22.11.2009
comment
Им действительно нужно перестать перемещать документацию. :) - person Donnie; 21.04.2013

Я нашел эту ссылку: http://blogs.mathworks.com/steve/2007/07/20/imoverlay-and-imagesc/ это работает.

он говорит:

im=imread('your image');
m=mat2gray(im);
in=gray2ind(m,256);
rgb=ind2rgb(in,hot(256));
imshow(rgb);
person Ema    schedule 29.06.2011

вы можете использовать этот код:

im=imread('your image');
k=rgb2gray(im);
imshow(k);

использование в матлабе

person Dian Permata    schedule 11.11.2012

Используйте функции imread() и rgb2gray(), чтобы получить изображение в оттенках серого.

Пример:

I = imread('input.jpg');
J = rgb2gray(I);
figure, imshow(I), figure, imshow(J); 

Если у вас есть изображение с цветовой картой, вы должны сделать следующее:

[X,map] = imread('input.tif');
gm = rgb2gray(map);
imshow(X,gm);

Алгоритм rgb2gray для вашей собственной реализации:

f(R,G,B) = (0.2989 * R) + (0.5870 * G) + (0.1140 * B)
person Alimpk    schedule 14.06.2017

Цветное изображение

Цветное изображение

Изображение в оттенках серого

Изображение в оттенках серого

  bg = imread('C:\Users\Ali Sahzil\Desktop\Media.png');  // Add your image 
  redChannel = bg(:, :, 1);
  greenChannel = bg(:, :, 2);
  blueChannel = bg(:, :, 3);
  grayImage = .299*double(redChannel) + .587*double(greenChannel) 
  +.114*double(blueChannel);
  imshow(grayImage);
person Ali Shahzil    schedule 12.04.2021
comment
Это лучшее решение, чем использование встроенного rgb2gray? - person Nathan Fellman; 25.04.2021
comment
Да, вполне нормально использовать встроенную функцию, но работа вручную дает вам лучшее понимание того, как создается изображение в градациях серого. - person Ali Shahzil; 26.04.2021

person    schedule
comment
›› k = rgb2gray(im); Неопределенная функция «rgb2gray» для входных аргументов типа «uint8». - person ntg; 11.12.2013

person    schedule
comment
Я знаю, что ответ прост, но ответы только на код здесь не приветствуются. Пожалуйста, добавьте немного контекста, объясните, что делает rgb2gray и, возможно, дайте ссылку на документацию. - person horchler; 14.10.2015