Filtrer une image en fonction d'une ou plusieurs couleurs

L'essentiel de cette page !

La fonction filter_img (dont le code est disponible ci-dessous) permet d'extraire les composantes rouge, verte et/ou bleue d'une image et de les restituer en l'état ou en niveau de gris.

Le code à copier-coller pour avoir la fonction filter_img()

filter_img <- function(img,type="r",grey=F){  
 if (grey==F) {
  temp <- img
  if (type == "r"){temp [,,2] <- 0 ; temp[,,3] <- 0
  } else if ((type == "v")|(type == "g")){temp [,,1] <- 0 ; temp[,,3] <- 0
  } else if (type == "b"){temp [,,1] <- 0 ; temp[,,2] <- 0
  } else if ((type == "rv")|(type == "vr")|(type == "gr")|(type == "rg")){temp[,,3] <- 0
  } else if ((type == "rb")|(type == "br")){temp[,,2] <- 0
  } else if ((type == "vb")|(type == "bv")|(type == "gb")|(type == "bg")){temp[,,1] <- 0  }
 } else if (grey==T) {
  if (type == "r"){temp <- img[,,1]
  } else if ((type == "v")|(type == "g")){temp <- img[,,2]
  } else if (type == "b"){temp <- img[,,3]
  } else if ((type == "rv")|(type == "vr")|(type == "rg")|(type == "gr")){temp<- (img[,,1]+img[,,2])/2
  } else if ((type == "rb")|(type == "br")){temp<- (img[,,1]+img[,,3])/2
  } else if ((type == "vb")|(type == "bv")|(type == "gb")|(type == "bg")){temp<- (img[,,2]+img[,,3])/2}}
return(temp)}

Exemple d'applications de la fonction filter_img()

# Pour ouvrir une image
library("png") ; img1<-readPNG("png.png")


Cet exemple permet de comparer image d'origine et composante rouge.

img2 <- filter_img(img1,type="r") ; display(img1,img2)

cf. La fonciton display nécessaire.

Récupérer les composantes rouge et verte, ce qui donne la composante jaune.

img2 <- filter_img(img1,type="rv") ; display(img2)

Récupérer la composante bleue et la convertir en niveau de gris avec le paramètre grey=T

img2 <- filter_img(img1,type="b",grey=T) ; display(img2)