rgbImage = grayImage/max(max(grayImage));
oCómo convertir una matriz de escala de grises a una matriz RGB en MATLAB?
rgbImage = grayImage/255;
¿Cuál de lo anterior es correcto, y la razón?
rgbImage = grayImage/max(max(grayImage));
oCómo convertir una matriz de escala de grises a una matriz RGB en MATLAB?
rgbImage = grayImage/255;
¿Cuál de lo anterior es correcto, y la razón?
Para convertir un grayscale image a un RGB image, hay dos cuestiones que hay que abordar:
double
, los valores de pixel de imagen deben ser números de punto flotante en el rango de 0 a 1. Cuando se almacena como un tipo de datos uint8
, los valores de los píxeles de imagen deben ser enteros en el rango de 0 a 255. Se puede verifique el tipo de datos de una matriz de imagen usando la función class
.Aquí hay 3 condiciones típicas que se puede encontrar:
para convertir una imagen en escala de grises uint8
o double
a una imagen RGB de el mismo tipo de datos, puede utilizar las funciones repmat
o cat
:
rgbImage = repmat(grayImage,[1 1 3]);
rgbImage = cat(3,grayImage,grayImage,grayImage);
Para convertir un gra uint8
imagen yscale una imagen de double
RGB a, se debe convertir a double
primero, y luego la escala de 255:
rgbImage = repmat(double(grayImage)./255,[1 1 3]);
para convertir una imagen en escala de grises double
una imagen de uint8
RGB a, debe escalar por 255 primero, y luego convertir a uint8
:
rgbImage = repmat(uint8(255.*grayImage),[1 1 3]);
Por definición, una imagen RGB tiene 3 canales, lo que implica que necesita una matriz tridimensional para representar la imagen. Por lo tanto, la respuesta correcta es:
rgbImage = repmat(255*grayImage/max(grayImage(:)),[1 1 3]);
Tenga cuidado al normalizar grayImage
. Si grayImage
es uint8
, perderá cierta precisión en la operación 255*grayImage/max(grayImage(:))
.
Además, la normalización de grayImage
depende de los datos. En su pregunta, que utilizó dos métodos:
rgbImage = grayImage/max(max(grayImage));
que normaliza la imagen en escala de grises de tal manera que el valor máximo de la imagen es 1
y
rgbImage = grayImage/255;
que sólo tiene sentido si los valores en grayImage
se encuentran en el rango 0-255
.
Por lo tanto, realmente depende de lo que quiere hacer. Pero, si desea una imagen RGB, necesita convertir su matriz de un solo canal en una matriz de 3 canales.
pensé que, por definición, el valor máximo de '' 1' rgbImage' es, lo que denota 'white', pero esto no parece ser el caso? – user198729
No realmente, depende del uso que haga de la imagen. – Jacob
Acabo de hacer una prueba, parece 'double (grayImage)' es lo mismo que 'grayImage'? Y son'./'Y'. * 'Los operadores de división y producto en MATLAB? Parece que '. /' Es lo mismo que '/'? – user198729
@ user198729: Los operadores '. /' Y '. *' Indican * división y multiplicación de elemento *, de modo que cada elemento de la matriz de imagen se divide o se multiplica por 255. Puede verificar la clase (es decir, tipo de datos) de una matriz escribiendo 'clase (grayImage)'. Si bien 'double (grayImage)' y 'grayImage' podrían * aparecer * para ser iguales, cada una de ellas puede ser una clase diferente (de modo que almacenen sus valores de diferentes maneras). – gnovice
Probé varias operaciones, pero '/' y '. /' Nunca dan un resultado diferente ... Y porque 'double (grayImage)' es lo mismo que 'grayImage',' double (grayImage) ./ 255' también es lo mismo que 'grayImage./255'.So¿puede dar dos ejemplos que demuestren por qué'./'y' double' son necesarios? – user198729