Bonjour à tous,
J'aurai besoin de votre aide sur la vectorisation d'un bout de mon code pour éviter de faire un grand nombre de boucles.
J'ai deux grilles superposées l'une sur l'autre (une pivoté de X° par rapport à l'autre). Cela permet de faire apparaitre les surfaces d'intersection entre ces deux grilles qui ont chacune une couleur différente.
Note: une case d'une des grilles représente un pixel de 10*10.
Pièce jointe 152196
balayant d'en un premier temps selon x0 et y0 les coin haut gauche d'un pixel, puis une fois le pixel sélectionné je balaye l’intérieur du pixel selon x et y.
A l'intérieur de chaque pixel je balaye aussi l'ensemble des couleurs.
Une fois que dans un pixel j'ai trouvé qu'il y a cette couleur, j'incrémente le nombre de "sous-pixels" qu'il y a ds ce "gros" pixel (10*10), nombre qui me sert à calculer l'aire correspondant à chaque couleur.
Voici mon code :
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 cases=1; for y0=y_0:taille_pixel:y_0+(taille_pixel*(nbre_cases1-1)) for x0=x_0:taille_pixel:x_0+(taille_pixel*(nbre_cases2-1)) %Calcul de l'aire des couleurs présentes dans le pixel étudié du %repère R0. %Note: On balaye l'ensemble des pixels de R0 pour mesurer l'aire %de chaque couleur présente dans ce pixel. Aire_couleur = zeros(1,nbre_cases1*nbre_cases2,'single'); for couleur_pixel = 1:nbre_cases1*nbre_cases2 for y=y0:y0+taille_pixel-1 for x=x0:x0+taille_pixel-1 if Detection5(y,x) == couleur_pixel Aire_couleur(couleur_pixel) = Aire_couleur(couleur_pixel) + 1; end end end Aire_couleur(couleur_pixel) = Aire_couleur(couleur_pixel)/((taille_pixel-1)*(taille_pixel-1)); RR(cases,:)=Aire_couleur(:); % Matrice comportant les % de chaque couleur, il suffit de sommer les lignes correspondantes au meme rayon end cases=cases+1; end end
Partager