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 53
|
for i=1:300 % le nombre de lignes de la matrice, chaque ligne correspond à un profil à part
vecteur=matrice(i,:);
Erreur=[]; %matrice où je vais stocker mes erreurs que je détecte
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 |
Partager