Bonsoir,
Je suis nouveau dans R, j'ai une image auquelle je voudrais appliquer l'algorithme de clustering PCA. J'essie à l'appliquer sous R mais je trouve des difficultés. Quelqu'un peut m'aider.
Merci, bonne soirée.
Bonsoir,
Je suis nouveau dans R, j'ai une image auquelle je voudrais appliquer l'algorithme de clustering PCA. J'essie à l'appliquer sous R mais je trouve des difficultés. Quelqu'un peut m'aider.
Merci, bonne soirée.
Bonjour,
Je sais pas trop si on peut parler d'algorithme de clustering mais bon.
Regarde du côté du package Factoshiny, qui est lui-même basé sur FactoMineR.
A voir l'article R Bloggers et la vidéo intégrée.
Ca te permet de visualiser les résultats de l'ACP et de les manipuler facilement (ajout variables / observations supplémentaires en particulier).
Si tu as des messages d'erreur plus précis, poste les ici.
Bon courage.
Emmanuel
Bien entendu on peut appliquer l'ACP à une image comme à n'importe quelle matrice mais pour faire quoi ? Les applications de l'ACP (ou de dérivées de l'ACP) que je connais pour l'imagerie concernent des séries temporelles, c'est-à-dire que selon les cas, le temps est en colonne ou en ligne. Pour avoir de l'aide, il faudrait beaucoup plus de précisions sur le problème (les données, les hypothèses, le critère de regroupement...) et rien ne ditqu'une approche de type ACP + clustering sur les résultats de l'ACP réponde au problème.
Merci pour votre réponse Emmanuel R
voila mon code je ne sais pas comment appliquer cet algorithme sur mon image
tu peut m'aider et merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 library(FactoMineR) library(jpeg) # save it as "Image.jpg" in the directory img <- readJPEG("lena30.jpg") # Read the image # Obtain the dimension imgDm <- dim(img) # Assign RGB channels to data frame imgRGB <- data.frame( x = rep(1:imgDm[2], each = imgDm[1]), y = rep(imgDm[1]:1, imgDm[2]), R = as.vector(img[,,1]), G = as.vector(img[,,2]), B = as.vector(img[,,3]) ) library(ggplot2) # ggplot theme to be used plotTheme <- function() { theme( panel.background = element_rect( size = 3, colour = "black", fill = "white"), axis.ticks = element_line( size = 2), panel.grid.major = element_line( colour = "gray80", linetype = "dotted"), panel.grid.minor = element_line( colour = "gray90", linetype = "dashed"), axis.title.x = element_text( size = rel(1.2), face = "bold"), axis.title.y = element_text( size = rel(1.2), face = "bold"), plot.title = element_text( size = 20, face = "bold", vjust = 1.5) ) } # Plot the image ggplot(data = imgRGB, aes(x = x, y = y)) + geom_point(colour = rgb(imgRGB[c("R", "G", "B")])) + labs(title = "Original Image: Colorful Bird") + xlab("x") + ylab("y") + theme() # Apply PCA clustering on the image pc <- PCA(imgRGB[, c("R", "G", "B")]) #kColours <- rgb(pc$centers[pc$cluster,]) summary(pc) res.HCPC<-HCPC(pc)
Merci pour votre réponse faubry
je voudrais segmenter l'image par l'algorithme PCA
La question essentielle est quel est le problème et quelle est la justification de l'approche par ACP. Si c'est un clustering sur une base colorimétrique, un codage RGB n'est peut-être pas la meilleure solution.
C'est un TP, non ? J'ai souvenir d'avoir déjà effectué une PCA sur la photo de Mlle Lena Soderberg (NSW) pendant mes études moi aussi...
Je ne vois pas un autre intérêt que le pédagogique pour cette approche, mais quelque part je ne suis pas trop à l'aise avec les algos de traitement d'image.
Bref. Je pense que ton cluster est fourni de cette ligne :
Pas de chance : elle ne s'exécute pas chez moi ("cannot allocate vector of size 9.5 Gb", purement un souci de ma machine). Mais j'imagine que ça marche de ton côté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part res.HCPC<-HCPC(pc)
Une consultation de l'aide de la fonction HCPC m'indique que cette dernière retourne une liste, contenant notamment cela :
Ca doit être ce qui t'intéresse.data.clust
The original data with a supplementary column called clust containing the partition.
Essaie de récupérer cette colonne avec cette instruction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part res.HCPC$data.clust
A toi de voir ce que tu dois en faire derrière...
----
Une autre idée serait de récupérer la liste des pixels les mieux représentés en cos² sur le plan factoriel, et de n'afficher que ces pixels sur l'image.
J'avoue ne pas savoir ce que ça ferait, mais qui sait ? Ca peut être une bonne surprise.
Bon, ce serait un TP mais il existe alors des problèmes beaucoup mieux adaptés que ce bidouillage pour s'initier au clustering en général, et au clustering suite à l'ACP en particulier.
1) les données à analyser sont 3D, l'ACP ne trouvera au maximum que 3 axes ;
2) si le clustering est fait sur les 3 axes de l'ACP par une méthode basée sur un calcul de distance euclidienne, alors prendre les 3 axes résultant de l'ACP ou prendre les données initiales conduira au même résultat ;
3) une analyse sérieuse des résultats de l'ACP sur lena, mais encore faut-il savoir ce qu'est une ACP et comment manipuler ses résultats, montre qu'il ne faut conserver qu'un seul axe, ce qui signifie qu'il fut relancer l'ACP de FactoMineR en ne demandant qu'un seul axe puis faire HCPC ensuite.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager