Ecualización de histogramas usando lenguaje R

La ecualización de histogramas es una técnica para ajustar las intensidades de la imagen para mejorar el contraste. Para mejorar el contraste de la imagen, distribuye los valores de intensidad de píxeles más frecuentes o extiende el rango de intensidad de la imagen. Al lograr esto, la ecualización del histograma permite que las áreas de la imagen con menor contraste obtengan un mayor contraste.

La ecualización de histograma se puede utilizar cuando tiene imágenes que parecen desteñidas porque no tienen suficiente contraste. En tales fotografías, las áreas claras y oscuras se mezclan creando una imagen más plana que carece de luces y sombras. Para superar este problema, podemos usar la ecualización de histogramas.

El lenguaje de programación R admite subsistemas para lidiar con esto. Este artículo tiene como objetivo igualar un histograma utilizando el lenguaje de programación R.

Primero instale el paquete imager en Rstudio. Imager es un paquete de procesamiento de imagen/video para R, basado en CImg. (La imagen utilizada aquí ya está en el paquete). Luego leeremos la imagen y la escalaremos de grises. Para la escala de grises, simplemente pase la imagen cargada a la función de escala de grises() como argumento.

Sintaxis:

escala de grises (imagen)

 La función plot() se utiliza para trazar las imágenes.

Ejemplo:

R

library(imager)
 
# original image
plot(boats)
 
boats.g <- grayscale(boats)
 
# grayscaled image
plot(boats.g)

Producción:

Ahora, para ver el valor de luminancia en la imagen, use hist() antes de la ecualización. El atributo principal se utiliza para dar el título al histograma.

Sintaxis:

escala de grises(imagen) %>% hist(main=”encabezado”)

Ejemplo:

R

library(imager)
 
grayscale(boats) %>% hist(main="Luminance values in boats picture")

Producción:

Escalaremos la imagen en escala de grises y calcularemos la distribución acumulativa de los píxeles de la imagen usando la función ecdf(). También transformará el valor de luminancia en histograma y hará que la imagen en escala de grises se iguale. 

Luego, se usa as.cimg() para convertir datos en una imagen. El atributo dim es básicamente las dimensiones de la imagen.

Sintaxis:

f <- ecdf(imagen.g)

f(imagen.g) %>% hist(main=”Título”)

f(imagen.g) %>% as.cimg(dim=dim(imagen.g)) %>% plot(main=”encabezado”)

# Hist. ecualización para escala de grises

hist.eq <- function(im) as.cimg(ecdf(im)(im),dim=dim(im))

Ejemplo:

R

library(imager)
 
f <- ecdf(boats.g)
f(boats.g) %>% hist(main="Transformed luminance values")
f(boats.g) %>% as.cimg(dim=dim(boats.g)) %>% plot(
  main="With histogram equalisation")
 
# Hist. equalisation for grayscale
hist.eq <- function(im) as.cimg(ecdf(im)(im),dim=dim(im))

Producción:

Ahora dividiremos la imagen en los canales de color y también igualaremos la imagen coloreada. La función imsplit() se usa para dividir la imagen en canales de color y «c» es el eje pasado. La función map_il() mapeará la variable hist.eq con cada una de las imágenes canalizadas de color divididas y se asegurará de que la salida sea una imagen. La función imappend() recombinará las imágenes divididas a lo largo del eje “c” y la función plot() trazará la imagen ecualizada.

Sintaxis:

#Dividir entre canales de color,

cn <- imsplit(imagen,”c”)

#ahora tenemos una lista de imágenes

cn 

#ejecutar hist.eq en cada

cn.eq <- map_il(cn,hist.eq) 

#recombinar y trazar

imappend(cn.eq,”c”) %>% plot(main=”Título”) 

Ejemplo:

R

library(imager)
 
# Split across colour channels,
cn <- imsplit(boats,"c")
 
# we now have a list of images
cn
 
# run hist.eq on each
cn.eq <- map_il(cn,hist.eq)
 
# recombine and plot
imappend(cn.eq,"c") %>% plot(main="All channels equalised")

Producción:

Publicación traducida automáticamente

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