j'ai fais un programme de correction d'erreurs sur des profils qui se trouvent dans des matrices de 300 lignes, avant de mettre mon programme dans une boucle i de 1 à 300 je l'ai testé sur certains profils et il marchait bien mais là en le testant sur toute la matrice il s'arrête (si je ne me trompe pas) sur la 239ème ligne et affiche ceci comme erreur
??? Attempted to access x(0); index must be a positive integer or logical.

Error in ==> interp1 at 139
h = (x(m)-x(1))/(m-1);

Error in ==> erreur at 47
vecteur_cor=interp1(idx,vecteur(idx),x,'linear','extrap');
du coup je ne comprend pas pourquoi ça marche pour les autres lignes de profils et pas sur celle ci

voici mon programme où je crois avoir traiter tous mes cas possibles de défauts
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
Erreur=[]; %matrice où je vais stocker mes erreurs que je détecte
for i=1:300 % le nombre de lignes de la matrice, chaque ligne correspond à un profil à part
    vecteur=matrice(i,:);
    for j=1:1999 ;% nombre de colonne qui est 2000
        D=vecteur(j+1)-vecteur(j); %calculer la différence de hauteur entre deux point voisins
        if abs(D)>=15;% je teste s'il y a un saut de 10 pixel min, un seuil que j'ai fixé toute seule
            Erreur=[Erreur j];%la première ligne c'est pour stocker l'indice
            %             Erreur(2,)=[Erreur(2,) M_C(i,j)];% la deuxième ligne pour stocker la luminosité correspondante
            %             Erreur(3,)=[Erreur(3,) D];% la troisième ligne pour stocker la différence de gradient
        end
    end
    [lig,col]=size([Erreur]);
if col==0;
    matrice_cor(i,:)=vecteur;
else
    Tab_debut=[];
    Tab_fin=[];
    for j=1:(col-1); % je parcour mon tableau d'erreur
        if (Erreur(j+1)-Erreur(j))>10;% je teste la ou je trouve un saut de 10 pixel dans les indices je m'arrete et je definie touts ce qui est avant comme une seule erreur
            dernier=(Erreur(j))+1;%je met+2 juste pour etre sur que je prends une valeurs sans defaut
            premier=(Erreur(j+1))-1;
        end
        Tab_debut=[Tab_debut premier];
        Tab_fin=[Tab_fin dernier];
    end
    Tab_fin=[Tab_fin Erreur(col)];
    Tab_debut=[Erreur(1) Tab_debut];
 
    Tab_debut=unique(Tab_debut);
    Tab_fin=unique(Tab_fin);
 
    for compt=1:length(Tab_debut);
        for j=Tab_debut(compt):Tab_fin(compt);
            vecteur(j)=NaN;
        end
    end
 
    for j=1:2000;
        if vecteur(j)==639;
            vecteur(j)=NaN;
        end
    end
 
    x=1:2000;
    idx=find(~isnan(vecteur));% récupération des indices des valeurs ~= de nan
    vecteur_cor=interp1(idx,vecteur(idx),x,'linear','extrap');
    % transformation en mm
    vecteur_cor_mm=vecteur_cor/8.65;%1mm-->8.65pixels
    matrice_cor(i,:)=vecteur_cor_mm;
end
end
matrice_cor