En este artículo, exploramos la conversión del modelo de color RGB a escala de grises.
Imagen en escala de grises: la escala de grises es un rango de tonos de gris desde el blanco hasta el negro, tal como se usa en una pantalla o impresión monocromática. Las imágenes en escala de grises se usan más comúnmente en el procesamiento de imágenes porque los datos más pequeños permiten a los desarrolladores realizar operaciones más complejas en menos tiempo.
La imagen gris contiene 255 tonos de color negro. La intensidad 0 representa el negro y 255 representa el tono blanco. En el medio, existen tonos de oscuro y blanco. A medida que aumentamos el número de 0 a 255, el color oscuro se desvanece y el blanco se suma. Las imágenes grises a menudo se denominan imágenes en blanco y negro. Las cámaras anteriores solo podían capturar imágenes grises.
Imagen RGB: RGB es uno de los modelos de color para representar imágenes en color. RGB significa rojo, verde y azul. Una imagen RGB contiene 3 canales cada uno para el color RGB. Está representado por tres arrays bidimensionales. En el modelo RGB, los valores de intensidad van de 0 a 255. Intensidad 0 significa color rojo oscuro, verde o azul. A medida que aumenta la intensidad, el color se desvanece y se suma la blancura. La intensidad RGB 0 representa el negro y 1 representa el color blanco.
RGB value 0 (black) means Red=Green=Blue=0 RGB value 1 (white) means Red=Green=Blue=255
Hay una serie de métodos comúnmente utilizados para convertir una imagen RGB en una imagen en escala de grises, como
- método promedio
- método ponderado
Método Promedio: El método Promedio toma el valor promedio de R, G y B como el valor de la escala de grises.
Grayscale = (R + G + B ) / 3
Puede haber algún error de desbordamiento si la suma de R, G y B es mayor que 255. Para evitar la excepción, R, G y B deben calcularse respectivamente.
Grayscale = R / 3 + G / 3 + B / 3
El método promedio es simple pero no funciona tan bien como se esperaba. La razón es que los globos oculares humanos reaccionan de manera diferente a RGB. Los ojos son más sensibles a la luz verde, menos sensibles a la luz roja y menos sensibles a la luz azul. Por lo tanto, los tres colores deben tener diferentes pesos en la distribución. Eso nos lleva al método ponderado.
Método ponderado: el método ponderado, también llamado método de luminosidad, pesa el rojo, el verde y el azul según sus longitudes de onda. La fórmula mejorada es la siguiente:
Grayscale = 0.299R + 0.587G + 0.114B
Convertir RGB a escala de grises:
MatLab tiene una función incorporada para este propósito que usa una ponderación para los canales RGB. Pero simplemente podemos convertir RGB a escala de grises tomando el promedio de los canales rojo, verde y azul.
Función utilizada:
- Lee la imagen usando la función imread().
- Muestra la imagen usando la función imtool().
- Acceder a un canal de color particular: k(:, :, 1);
Ejemplo:
Matlab
% Code in MatLab for separating Red, % Green and Blue components. % Read the colour image. k=imread("yellow1.jpg"); % display original image. imtool(k,[]); % display Red channel. imtool(k(:,:,1),[]); % display Green channel. imtool(k(:,:,2),[]); % display Blue channel. imtool(k(:,:,3),[]);
Producción:
Explicación del código:
- k=imread(“amarillo1.jpg”); esta línea lee la imagen en color.
- imtool(k,[]); esta línea muestra la imagen original.
- imtool(k(:,:,1),[]); esta línea muestra el canal rojo.
- imtool(k(:,:,2),[]); esta línea muestra el canal verde..
- imtool(k(:,:,3),[]); esta línea muestra el canal azul
2. Código en MatLab para convertir RGB a escala de grises.
Matlab
% MATLAB code for convert RGB into Grayscale. % read the image. k=imread("yellow1.jpg"); %Convert into double format. k=double(k); % take the average of R, G and B channels. k1=(k(:,:,1)+k(:,:,2)+k(:,:,3))/3; % display after converting into uint8 format. imtool(uint8(k1),[]);
Producción:
Explicación del código:
- k=imread(“amarillo1.jpg”); esta línea lee la imagen.
- k=doble(k); esta línea se convierte en formato doble.
- k1=(k(:,:,1)+k(:,:,2)+k(:,:,3))/3; esta línea toma el promedio de los canales R, G y B.
- imtool(uint8(k1),[]); esta línea muestra una imagen gris después de convertirla al formato uint8.
Publicación traducida automáticamente
Artículo escrito por pintusaini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA