¿Cómo convertir tres canales de imagen en color en una imagen en escala de grises en MATLAB?

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.

Gray = (Red + Green + Blue)/3; = 0.33 * Red + 0.33 * Green + 0.33 * Blue Matlab function: Gray = 0.299 * R + 0.587 * G + 0.114 * B

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:

 

Figura 1: imagen en color original

 

Figura 2: Salida del canal rojo

 

Figura 3: Salida del Canal Verde 

 

Figura 4: Salida del Canal Azul

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:

 

Figura 5: Imagen en color

 

Figura 6: Imagen en escala de grises

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *