Histogramme d'une image

L'essentiel de cette page !

Voici une fonction qui permet de voir la répartition des valeurs des pixels par intensité dans es composantes rgb (rouge, vert, bleu).

Ce qu'il faudrait améliorer dans cette fonction :

  • La rendre compatible avec les images en niveau de gris
  • Colorer les zones d'interférences des courbes par des polygones (ex : interférence rouge, vert = jaune)
  • Afficher automatiquement le nom de l'image dans le titre de l'histogramme.

La commande à copier-coller dans R

hist_img <- function(img){
  red <- as.vector(img[,,1])*255
 green <- as.vector(img[,,2])*255
 blue <- as.vector(img[,,3])*255
 densite_red <- density(red)
 densite_green <- density(green)
 densite_blue <- density(blue)
 y_max <- max(c(densite_red$y,densite_blue$y,densite_green$y))
plot(red,type="n",xlim=c(0,255),ylim=c(0,y_max),ylab="Fréquence",xlab="Intensité",main=names(img))
 lines(densite_red, col = "red",lwd=3) # Superposer la ligne rouge
 lines(densite_green, col = "green",lwd=3) # Superposer la ligne verte
 lines(densite_blue, col = "blue",lwd=3) # Superposer la ligne bleue
 grid() }

Exemple d'utilisation

library("png") ; img1<-readPNG("png.png")
hist_img(img1)