remplacer des éléments d'une matrice dans une boucle FOR
Salut tout le monde.
J'avance (tout) doucement dans la création d'un algorithme de traitement d'images, et me retrouve confronté à un problème que j'ai du mal à définir, et donc du mal à résoudre.
Pour la culture: je veux faire un traitement d'image sur une acquisition video en 640*480. Pour diminuer la charge de travail, j'ai fait une ROI circulaire centrée. Sur cette matrice, je veux appliquer une suite de masques (des cercles concentriques de dimension croissante).
J'ai réussi à:
modéliser mon masque "tout ou rien" de ma vidéo.
modéliser ma matrice de masquage, comportant 20 cercles.
appliquer la multiplication de l'une par l'autre, afin de trouver mes portions de masque à appliquer dans mon algo ultérieurement.
Ma matrice principale fait 480*640
mes matrices de masque font 201*201
voici le code (non fonctionnel, il manque les fichiers initiaux de masquage et de max détectés)
Code:
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
| load masquage.mat %matrice de masquage
load coordonnees_max.mat %max détectés via un autre script
nb_max=size(maxi,1);
masquelong=mask.Length;
nb_images=masquelong*nb_max;
masque_roi=cell(nb_max,masquelong); %prealloc
champ_cam_vide=zeros(480,640); %prealloc
%% création de la ROI centrale.
champ_cam=zeros(480,640);
struc_centr=strel('disk',200,0);
roi_chem=getnhood(struc_centr); %créé une matrice de 401*401 avec un cercle ne comportant que des 1, et l'extérieur ne comportant que des 0
%on veut insérer un cadre de 401*401 dans une matrice de 480*640, et ce, de façon (+/-) centrée.
x_add=(480-400)/2;
y_add=(640-400)/2;
champ_cam(x_add:x_add+400,y_add:y_add+400)=roi_chem; %matrice de 640*480 avec un cercle rempli de 1 au milieu
clear roi_chem struc_chem x_add y_add %coup de balai
%% application du masque en fonction des maxima détectés.
for i=1:nb_max
coord_x_max=max(i,1); %extraction des x et des y de chaque max détecté
coord_y_max=max(i,2);
for j=1:masquelong
imagemasque=getdatasamples(mask,j); %lecture pas à pas du masque à appliquer
masque_roi{i,j}=champ_cam(coord_x_max+100:coord_x_max+300,coord_y_max+100:coord_y_max+300).*imagemasque; %création d'un masque sur une ROI, mise en mémoire en tableau de cellules
end
end
linearisation=reshape(masque_roi,1,nb_images); |
Je bute dans la boucle "for" imbriquée: je voudrai intégrer chacune de mes valeurs de masque_roi{i,j} dans une matrice nulle de 480/640 mais je n'arrive pas à conceptualiser la chose au delà. Je n'arrive pas à faire d'indexation de type
Code:
roi_finale(x_add:x_add+200,y_add:y_add+200)=masque_roi{i,j}
et encore moins
Code:
roi_finale{i,j}(x_add:x_add+200,y_add:y_add+200)=masque_roi{i,j}[/
Je ne sais même pas comment chercher une réponse dans l'aide ou le forum a ce sujet.
Si vous arrivez à me comprendre (sait-on jamais :aie:) est-ce faisable? si oui, comment?