Если RGB
является изображением RGB (матрица размером [n,m,3]
), то преобразование в серое изображение gray
(массив [n,m]
) выполняется путем взвешенного усреднения 3 цветовых каналов .
В зависимости от вашего приложения, лучшим подходом может быть вместо взятия только зеленого канала (это самый чувствительный канал, у ПЗС-матрицы в два раза больше зеленых пикселей, чем у синих или красных пикселей):
gray = rgb(:,:,2);
Простое невзвешенное среднее часто достаточно хорошо:
gray = mean(rgb,3);
Стандарт RGB Adobe D65 использует веса 0,2973769, 0,6273491 и 0,0752741 для красного, зеленого и синего ( источник ). Но я не знаю, какие веса используются реализацией MATLAB rgb2gray
. Давайте предположим, что это те веса. Этот код вычисляет средневзвешенное значение:
[n,m] = size(rgb);
gray = reshape(rgb,[],3);
gray = gray * [0.30;0.63;0.07];
gray = reshape(gray,n,m);
В Octave вы можете написать его как однострочник:
gray = reshape(reshape(rgb,[],3) * [0.30;0.63;0.07], size(rgb)[1:2]);