¿Cómo realizar una pseudocoloración aleatoria en una imagen en escala de grises usando MATLAB?

Pseudo Coloring es una de las categorías atractivas en el procesamiento de imágenes. Se utiliza para hacer que las imágenes o videos antiguos en blanco y negro sean coloridos. Las técnicas de pseudocoloración se utilizan para el análisis que identifica las superficies de color de la imagen de muestra y el modelado adaptativo de la imagen en blanco y negro del histograma. Seleccionar diferentes valores en las capas R, G, B es el logro más importante de esta técnica, por lo que este método se basa en el análisis de las características del histograma en la imagen de muestra, para asignar diferentes valores en diferentes capas de una imagen en color, tomamos acción. La pseudocoloración también se conoce como un tema de coloración en el procesamiento de imágenes digitales. 

En esta técnica, se debe considerar como entrada un nivel de gris de tipo entero de 8 bits sin signo (un número entre cero y 255) y se deben lograr tres salidas para tres capas del gráfico de imagen digital en color y cada uno de estos tres niveles debe ser de tipo entero sin signo de 8 bits (un número entre cero y 255). Hay muchas técnicas para esta conversión que tienen algunas diferencias en función de nuestras necesidades.

colour (x,y) = [R(x,y)                 G(x,y)                  B(x,y)]   So:gray(x,y) = [R(x,y)                 G(x,y)                  B(x,y)]

 

  • Imagen en escala de grises: Es una imagen en blanco y negro. Los valores de píxeles son tonos de color gris que es la combinación de tonos blancos y negros. La imagen se representa en forma de una array bidimensional. Cada valor representa la intensidad o el brillo del píxel correspondiente en esa coordenada de la imagen. Son posibles 256 tonos en total para las imágenes en escala de grises. 0 significa negro y 255 significa blanco. A medida que aumentamos el valor de 0 a 255, aumenta el componente blanco y aumenta el brillo.
  • Imagen color RGB: Es una imagen coloreada. Consiste en tres arrays bidimensionales, que se denominan canales. Los canales rojo, verde y azul contienen los valores de color correspondientes para cada píxel de la imagen. En formato entero, el rango de intensidad de píxeles va de 0 a 255. 0 significa negro y 255 representa la mayor intensidad del color primario. Existen 256 tonos de cada color.

Pasos:

  • Lea la imagen en escala de grises.
  • Si su profundidad de bits es 24, entonces conviértalo en 8.
  • Crea una imagen vacía del mismo tamaño.
  • Asigne algún peso aleatorio a los canales RGB.
  • Copie el producto ponderado de la imagen en escala de grises a cada canal de rojo, verde y azul.
  • Muestre las imágenes después de la creación.

Funciones utilizadas: 

  • La función incorporada imread() se usa para leer la imagen.
  • La función incorporada imtool() se usa para mostrar la imagen.
  • La función incorporada rgb2gray( ) se usa para convertir RGB a una imagen gris.
  • La función incorporada uint8( ) se usa para convertir el doble en formato entero.
  • La función incorporada pause() se usa para detener la ejecución durante segundos específicos.

Ejemplo:

Matlab

% MATLAB code for pseudo colouring
% of grayscale images.
% UTILITY CODE
k=imread("gfglogo.png");
gray2rgb(k);
imtool(grayscale,[]);
function gray2rgb(img)
  
% Convert into grayscale if not.
[x,y,z]=size(img);
if(z==3)
    grayscale=rgb2gray(img);
end
gray=double(grayscale./255);
rgb(:,:,1)=gray(:,:)*0.5;
rgb(:,:,2)=gray(:,:)*0.6;
rgb(:,:,3)=gray(:,:)*0.4;
imtool(rgb,[]);
  
c(x,y,z)=0;
colour=uint8(c);
colour(:,:,1)=grayscale(:,:)*0.5;
colour(:,:,2)=grayscale(:,:)*0.7;
colour(:,:,3)=grayscale(:,:)*0.4;
imtool(colour,[]);
  
pause(10);
imtool close all;
end

Producción:

 

 

Explicación del código:

  • [x,y,z]=tamaño(img); Esta línea obtiene el tamaño de la imagen de entrada.
  • gris = doble (escala de grises./255); Esta línea convierte la imagen de entrada en formato doble.
  • rgb(:,:,1)=gris(:,:)*0.5; Esta línea construye canal rojo.
  • rgb(:,:,2)=gris(:,:)*0.6; Esta línea construye canal verde.
  • rgb(:,:,3)=gris(:,:)*0.4; Esta línea construye canal azul.
  • imtool(rgb,[]); Esta línea muestra la imagen compilada normal – RGB.
  • c(x,y,z)=0; Esta línea crea una imagen vacía con píxeles negros.
  • color=uint8(c); Esta línea convierte la imagen en formato entero.
  • color(:,:,1)=escala de grises(:,:)*0.5; Esta línea llena el canal rojo.
  • color(:,:,2)=escala de grises(:,:)*0.7; Esta línea llena el canal verde.
  • color(:,:,3)=escala de grises(:,:)*0.4; Esta línea llena el canal azul.
  • imtool(color,[]); Esta línea muestra la imagen coloreada formada.
  • pausa(10); Esta línea detiene la ejecución durante 10 segundos.
  • k=imread(“madhubala.png”); Esta línea lee la imagen de entrada. 
  • gris2rgb(k); Esta línea llama a la función de utilidad pasando la imagen de entrada como parámetro.

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 *