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

rgbImage = grayImage / max(max(grayImage));

или

rgbImage = grayImage / 255;

что из вышеперечисленного правильно, и причина?

2 ответов


преобразование изображение в оттенках серого до RGB-изображение, есть два вопроса, которые вы должны решить:

  • оттенки серого изображения являются 2-D, в то время как изображения RGB являются 3-D, поэтому вам нужно трижды повторить данные изображения в оттенках серого и объединить три копии вдоль третьего измерения.
  • данные изображения могут храниться во многих различных типы данных, так что вы должны преобразовать их соответственно. При хранении в double тип данных, значения пикселей изображения должны быть числами с плавающей запятой в диапазоне от 0 до 1. При хранении в uint8 тип данных, значения пикселей изображения должны быть целыми числами в диапазоне от 0 до 255. Вы можете проверить тип данных матрицы изображений с помощью функции class.

вот 3 типичных условия, с которыми вы можете столкнуться:

  • для преобразования a uint8 или double изображение в оттенках серого в RGB изображение один и тот же тип данных, вы можете использовать функции repmat или cat:

    rgbImage = repmat(grayImage,[1 1 3]);
    rgbImage = cat(3,grayImage,grayImage,grayImage);
    
  • преобразование uint8 изображение в оттенках серого до double RGB-изображение, вы должны преобразовать в double сначала, затем масштабировать на 255:

    rgbImage = repmat(double(grayImage)./255,[1 1 3]);
    
  • для преобразования a double изображение в оттенках серого до uint8 RGB изображение, вы должны сначала масштабировать на 255, а затем преобразовать в uint8:

    rgbImage = repmat(uint8(255.*grayImage),[1 1 3]);
    

по определению, изображение RGB имеет 3 канала, что означает, что вам нужна трехмерная матрица для представления изображения. Итак, правильный ответ:

rgbImage = repmat(255*grayImage/max(grayImage(:)),[1 1 3]);

будьте осторожны при нормировании grayImage. Если grayImage is uint8 тогда вы потеряете некоторую точность в 255*grayImage/max(grayImage(:)) операции.

кроме того, нормализация grayImage зависит от данных. В вашем вопросе вы использовали два метода:

rgbImage = grayImage / max(max(grayImage));

который нормализует изображение в оттенках серого, чтобы максимальное значение в изображении 1 и

rgbImage = grayImage / 255;

что имеет смысл только если значения в grayImage ложь в