Bonjour à tous,
J'essaie d'implémenter en matlab une fonction qui détecte les bords d'une image à la méthode de Canny. J'ai implémenté les fonctions 'convolution avec un noyau gaussien', et 'suppression des non maxima locaux' (cette dernière supprime les non maxima locaux après avoir fait un seuillage sur les normes des pixels). Je les appelle conv_gauss et nms.
Il ne me reste que la fonction 'hysteresis thresholding' que j'appelle hyst_tresh et qui retourne le résultat final
Voici le code que j'écris :
Malheureusement, quand j'exécute le programme sur un exemple, j'obtiens l'erreur suivante :Code:function output=hyst_thresh(I,t1,t2) %on suppose t1>t2 I_blur=conv_gauss(I); %la variance est fixée dans le corps de conv_gauss I_nms_1=nms(I,t1); %I_nms_1 ne contient que les maxima locaux supérieur à t1. I_nms_2=nms(I,t2); %le seuillage est inclus dans nms output=I_nms_1; [H,W]=size(output); %je rends noir les bords de l'image output(:,1)=zeros([1 H])'; output(:,W)=zeros([1 H])'; output(1,:)=zeros([1 W]); output(H,:)=zeros([1 W]); [strong_pixels_i,strong_pixels_j]=find(I_nms_1); while ~isempty(strong_pixels_i) for k=1:length(strong_pixels_i) i=edges_to_visit_i(k); j=edges_to_visit_j(k); %après viennent des if assez lourds qui disent en gros que si les deux pixels au voisinage de (i,j) et appartenant à la direction perpendiculaire au gradient en (i,j) ont un gradient de norme >=t2 alors on les met à 1. Ceci est fait en distinguant 4 cas selon si le gradient en (i,j) est approximé par une direction horizontale, verticale, ou diagonale afin que l'on puisse identifié les 2 pixels voisins sur la direction perpendiculaire au gradient en (i,j). end end [strong_pixels_i strong_pixels_j]=find(output & ~I_nms_1); % pour explorer les 'pixels bords' qui viennent d'être mis à jour dans la boucle, on va explorer leurs voisins. I_nms_1=output; end
Je ne comprend pas pourquoi il essaie d'accéder à une case qui est en dehors de la taille de strong_pixels_i. J'ai bien mis pour k les valeurs de 1 à length(strong_pixels_i) où length(strong_pixels_i) correspond au nombre d'éléments de strong_pixels_i.Code:??? Attempted to access strong_pixels_i(2); index out of bounds because numel(stron_pixels_i)=1. Error in ==> hyst_thresh at 26 i=strong_pixels_i(k);
Je serai reconnaissante pour toute aide,
Bien à vous.
-----