rgbImage = grayImage/max(max(grayImage));
илиКак преобразовать матрицу серого в матрицу RGB в MATLAB?
rgbImage = grayImage/255;
Какой из вышеперечисленных прав, и причина?
rgbImage = grayImage/max(max(grayImage));
илиКак преобразовать матрицу серого в матрицу RGB в MATLAB?
rgbImage = grayImage/255;
Какой из вышеперечисленных прав, и причина?
Чтобы преобразовать grayscale image к RGB image, есть два вопроса, вы должны решить:
double
значения пикселей изображения должны быть числами с плавающей запятой в диапазоне от 0 до 1. При сохранении в виде типа данных uint8
значения пикселей изображения должны быть целыми числами в диапазоне от 0 до 255. Вы можете проверьте тип данных матрицы изображений, используя функцию class
.Вот 3 типичные условия, которые могут возникнуть:
Чтобы преобразовать uint8
или double
полутоновое изображение в RGB изображение тот же тип данных, вы можете использовать функции repmat
или cat
:
rgbImage = repmat(grayImage,[1 1 3]);
rgbImage = cat(3,grayImage,grayImage,grayImage);
Чтобы преобразовать uint8
ГРА yscale изображения в double
RGB изображений, вы должны преобразовать в double
, а затем масштабе 255:
rgbImage = repmat(double(grayImage)./255,[1 1 3]);
Чтобы преобразовать 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
- uint8
, то вы потеряете некоторую точность в операции 255*grayImage/max(grayImage(:))
.
Кроме того, нормализация grayImage
зависит от данных. В вашем вопросе, вы использовали два метода:
rgbImage = grayImage/max(max(grayImage));
который нормализует черно-белое изображение таким образом, что максимальное значение в изображении 1
и
rgbImage = grayImage/255;
, который имеет смысл только в том случае, если значения в grayImage
лежат в диапазон 0-255
.
Так что это действительно зависит от того, что вы хотите сделать. Но, если вам нужно изображение RGB, вам нужно преобразовать одноканальную матрицу в 3-канальную матрицу.
Я подумал, что, по определению, максимальное значение 'rgbImage' является' 1', который обозначает 'white', но это, кажется, не так? – user198729
Не совсем, это зависит от вашего использования изображения. – Jacob
Я только что сделал тест, кажется, что 'double (grayImage)' такой же, как 'grayImage'? И'./'И'. * 'Делить и работать с продуктами в MATLAB? Кажется '. /' То же самое, что '/'? – user198729
@ user198729: Операторы '. /' И '. *' Обозначают * element-wise * деление и умножение, так что каждый элемент матрицы изображения делится или умножается на 255. Вы можете проверить класс (т. Е. Тип данных) матрицы, набрав 'class (grayImage)'. Хотя «double (grayImage)» и «grayImage» могут * отображаться * одинаковыми, каждый из них может быть другим классом (таким образом, чтобы они сохраняли свои значения по-разному). – gnovice
Я пробовал различные операции, но '/' и '. /' Никогда не давал другой результат ... И поскольку 'double (grayImage)' такой же, как 'grayImage',' double (grayImage) ./ 255' также так же, как 'grayImage./255'. Так вы можете привести два примера, демонстрирующих, почему нужны'./'и' double'? – user198729