MATLAB | Conversión de imagen RGB a imagen en escala de grises

Una imagen RGB se puede ver como tres imágenes (una imagen en escala roja, una imagen en escala verde y una imagen en escala azul) apiladas una encima de la otra. En MATLAB, una imagen RGB es básicamente una array M*N*3 de píxeles de color, donde cada píxel de color es un triplete que corresponde al componente de color rojo, azul y verde de la imagen RGB en una ubicación espacial específica.

De manera similar, una imagen en escala de grises se puede ver como una imagen de una sola capa. En MATLAB, una imagen en escala de grises es básicamente una array M*N cuyos valores se han escalado para representar intensidades.

En MATLAB, hay una función llamada rgb2gray() disponible para convertir una imagen RGB en una imagen en escala de grises. Aquí convertiremos una imagen RGB a una imagen en escala de grises sin usar la función rgb2gray().

Nuestra idea clave es convertir un píxel de imagen RGB con un valor de triplete correspondiente al componente de color rojo, azul y verde de una imagen en una ubicación espacial específica en un solo valor mediante el cálculo de una suma ponderada de los tres componentes de color.

Algoritmo para la conversión:

  1. Lea la imagen en color RGB en el entorno MATLAB
  2. Extraiga los componentes de color rojo, azul y verde de la imagen RGB en 3 arrays 2-D diferentes
  3. Cree una nueva array con el mismo número de filas y columnas que la imagen RGB, que contenga solo ceros.
  4. Convierta cada valor de píxel RGB en la ubicación (i, j) en valores de escala de grises formando una suma ponderada de los componentes de color rojo, verde y azul y asígnelo a la ubicación correspondiente (i, j) en la nueva array
  5. grayscale value at (i, j) = 0.2989 * R(i, j) + 0.5870 * G(i, j) + 0.1140 * B(i, j);

    Nota: Los coeficientes que se utilizan para calcular los valores de la escala de grises son idénticos a los que se utilizan para calcular la luminancia (E’y) en Rec. ITU-R BT.601-7 (Recomendación del sector de radiocomunicaciones de la UIT para el servicio de radiodifusión (televisión))

Implementación:

% Function will take a colour image as input  and will return a grayscale image 
function [gray_img] = colouredToGray(img)
       % Extract Red colour component to R, Green colour component to G 
       % and Blue colour component to  B  
       R=img(:, :, 1);
       G=img(:, :, 2);
       B=img(:, :, 3);

      % Getting number of rows in M and number of column in N of RGB image matrix 
      % ~ is used to ignore dimension of RGB image
      % as size(img) function will return row, column and dimension of the RGB image
      [M, N, ~]=size(img);

     % creating a new 2-d matrix 'gray_img' of size M*N of 'uint8' data type with all 
     % elements  as zero 
     gray_img=zeros(M, N, 'uint8');

     % calculating grayscale values by forming a weighted sum of the R, G, and B components
     % for each pixel
     for i=1:M
         for j=1:N
               gray_img(i, j)=(R(i, j)*0.2989)+(G(i, j)*0.5870)+(B(i, j)*0.114);
              end
     end
end

La función anterior se llamará desde la ventana de comandos de MATLAB

>> % Reading  an RGB image file in MATLAB environment 
>> img=imread('apple.jpg');

>> % The above function will be called here
>> I=colouredToGray(img);
>> figure, imshow(I);

Aporte:

An RGB Image

Producción:

Grayscale Image

ventajas:

  • Para almacenar un solo píxel de color de una imagen en color RGB, necesitaremos 8*3 = 24 bits (8 bits para cada componente de color), pero cuando convertimos una imagen RGB en una imagen en escala de grises, solo se requieren 8 bits para almacenar un solo píxel. de la imagen Así que necesitaremos un 33 % menos de memoria para almacenar una imagen en escala de grises que para almacenar una imagen RGB
  • Las imágenes en escala de grises son mucho más fáciles de trabajar dentro de una variedad de tareas como En muchas operaciones morfológicas y problemas de segmentación de imágenes, es más fácil trabajar con una imagen de una sola capa (imagen en escala de grises) que con una imagen de tres capas (imagen en color RGB)
  • También es más fácil distinguir las características de una imagen cuando tratamos con una imagen de una sola capa.

Publicación traducida automáticamente

Artículo escrito por ihritik 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 *