Как получить канал яркости из изображения RGB в MATLAB

Я пытаюсь получить компонент яркости из набора изображений 'TIF' в Matlab. Код ниже:

function [defaultImages] = readImgLum(nFiles) 
% readImgLum reads a specified number of images in 'tif' format
% and retrieves the luminance component
narginchk(1, 1);
defaultImages = cell(nFiles, 1);                % store all images in a vector

for i = 1 : nFiles
    imagePreffix = int2str(i);
    imageFullName = strcat(imagePreffix, '.tif');
    image = imread(imageFullName);
    imageYCbCr = rgb2ycbcr(image);    
    defaultImages{i} = squeeze(imageYCbCr(:,:,1));
end

Я правильно извлекаю компонент яркости?

1 ответ

Как говорится в комментариях, нет необходимости squeeze, Этот код также выглядит хорошо для меня. Однако, если вы хотите пропустить вычисления всех компонентов YCbCr просто для извлечения яркости используйте стандарт SMPTE / PAL для расчета яркости. Это на самом деле сделано в rgb2gray в MATLAB, если вы хотите посмотреть источник.

В любом случае, если ваши изображения имеют 8-битное целое число без знака:

image = double(image); 
defaultImages{i} = uint8(0.299*image(:,:,1) + 0.587*image(:,:,2) + 0.114*image(:,:,3));

КСТАТИ, image встроенная команда в MATLAB Это берет в любой матрице, и визуализирует это как изображение в новой фигуре. Я настоятельно рекомендую вам использовать другую переменную для хранения вашего временного изображения, так как вы, возможно, позже будете вызывать дополнительный код, который требует image как функция.

Другие вопросы по тегам