Как преобразовать матрицу оттенков серого в матрицу 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
ложь в