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)
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 : 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 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);
et encore moins
Code : Sélectionner tout - Visualiser dans une fenêtre à part roi_finale(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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part roi_finale{i,j}(x_add:x_add+200,y_add:y_add+200)=masque_roi{i,j}[/
Si vous arrivez à me comprendre (sait-on jamais ) est-ce faisable? si oui, comment?
Partager