Bonjour

voila je vous explique un peu ce que je veut faire !!
en fait j'ai une image binaire que je veut décomposer en bloc de telle sorte que les blocs soient uniformes c a d il ont les même coordonnées en abscisse
un bloc se caractérise par ses coins sup gauche et inf droit (x1 y1,x2 y2)
moi je veux une structure qui contient tous les blocs enfin leur coordonnées seulement parce que le contenu c'est des "1" alors pas d'importance quand je veux faire des traitements!
Alors j'ai écrit un algo mais j'ai des problème en ce qui concerne le premier élément de mon cell array voici l'algo bien expliqué avec la première erreur générée.
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
function [b] = IBR(im)
k=1;        %%indice du tableau cell contenant les info des bloc ajouté
kp=1;       %% indice du vecteur contenant les indice des bloc ajouter
              %%precedement  
[M N]=size(im);
for y=1:N
   kc=1; %% indice du vercteur contenant les indice des blocs en cours de %%traitement 
   x=1;
    while (x<=M)
        while (im(x,y)==0 && x<M)
            x=x+1;
        end          %%ajout blocs a b{} qui est vide initialement 
        if (x<=M)     %%detection de l'objet et initialisation du 1er repére (x1)
            x1=x;
        end
        while (im(x,y)==1)    %% parcourir l'objet
            x=x+1;
        end
        if (x<=M)          %%detection de la fin de l'objet
            x2=x-1;         %%2éme repére (x2)
            trouv=true;  %%objet trouver pour dire que la ligne contien des '1'
        end
        if (trouv)             
            connect=false; 
%%si objet trouver vérifier si il ne correspond pas    
%%a des bloc ajouter precedement ie: avec les méme x1 et x2
            for j=1:kp
                if(x1==b{p(j)}(1) && x2==b{p(j)}(2))    %%verification
                    C(kc)=p(j); b{p(j)}(4)=y;
                    connect=true;            %%si il ya correspondance alors 
                end         %%on le connect avec le bloc qui lui correspond
            end
 
        if (connect==false) 
%%pas de correspondance alors on crée un nouveau bloc 
            b{k}(1)=x1; b{k}(2)=x2;
            b{k}(3)=y; b{k}(4)= y;
            C(kc)=k; k=k+1; %%incrementé l'indice de nombre de blocs ajouter
        end
        kc=kc+1;                                        
        end
    for i=1:k-1
        p(i)=C(i);
        kp=kc;           %%indice de blocs precedent est incrementé
    end
    end
end
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
pour l'erreur :
>> IBR(im)
??? Undefined function or variable "p".

Error in ==> IBR at 25
if(x1==b{p(j)}(1) && x2==b{p(j)}(2)) %%verification
j'espère que c'est clair !