IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Fonction de Harris


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut Fonction de Harris
    Salut tout le monde
    je voulais savoir comment paramétrer la fonction de Harris pour avoir un nombre fixe de points d’intérêts
    En fait j'aime avoir le même nombre de points d’intérêts pour deux images différentes et si j'effectue la fonction de Harris elle donne les points présents dans chaque image et moi je veux avoir un nombre bien déterminé
    merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Si j'ai bien compris...
    Selon l'aide matlab ici
    ça te dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C = corner(I, N) detects corners in image I and returns a maximum of N corners.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    merci Mr
    toutefois je veux avoir ce nombre N avec cette fonction corner mais avec la méthode
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    function points = detectionaveclasouris(fig1)
    % Harris detector
    % The code calculates
    % the Harris Feature Points(FP) 
    % 
    % When u execute the code, the test image file opened
    % and u have to select by the mouse the region where u
    % want to find the Harris points, 
    % then the code will print out and display the feature
    % points in the selected region.
    % You can select the number of FPs by changing the variables 
    % max_N & min_N
    % A. Ganoun
    %fig1=imread('C:\Users\Aymen\Desktop\ABCmatlabcode\MATLABABCv2\image2.jpg');
    %fig1=imread('figure2.gif','gif');
    I=double(fig1);
    %I =double(frame);
    %****************************
    %imshow(frame);
    imshow(I);
    k = waitforbuttonpress;
    point1 = get(gca,'CurrentPoint');  %button down detected
    rectregion = rbbox;  %%%return figure units
    point2 = get(gca,'CurrentPoint');%%%%button up detected
    point1 = point1(1,1:2); %%% extract col/row min and maxs
    point2 = point2(1,1:2);
    lowerleft = min(point1, point2);
    upperright = max(point1, point2); 
    ymin = round(lowerleft(1)); %%% arrondissement aux nombrs les plus proches
    ymax = round(upperright(1));
    xmin = round(lowerleft(2));
    xmax = round(upperright(2));
    %***********************************
    Aj=6;
    cmin=xmin-Aj; cmax=xmax+Aj; rmin=ymin-Aj; rmax=ymax+Aj;
    %min_N=12;max_N=16;
    min_N=1500;max_N=1500;
    %%%%%%%%%%%%%%Intrest Points %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    sigma=2; Thrshold=20; r=6; disp=1;
    dx = [-1 0 1; -1 0 1; -1 0 1]; % The Mask 
        dy = dx';
        %%%%%% 
        Ix = conv2(I(cmin:cmax,rmin:rmax), dx, 'same');   
        Iy = conv2(I(cmin:cmax,rmin:rmax), dy, 'same');
        g = fspecial('gaussian',max(1,fix(6*sigma)), sigma); %%%%%% Gaussien Filter
     
        %%%%% 
        Ix2 = conv2(Ix.^2, g, 'same');  
        Iy2 = conv2(Iy.^2, g, 'same');
        Ixy = conv2(Ix.*Iy, g,'same');
        %%%%%%%%%%%%%%
        k = 0.04;
        R11 = (Ix2.*Iy2 - Ixy.^2) - k*(Ix2 + Iy2).^2;
        R11=(1000/max(max(R11)))*R11;
        R=R11;
        ma=max(max(R));
        sze = 2*r+1; 
        MX = ordfilt2(R,sze^2,ones(sze));
        R11 = (R==MX)&(R>Thrshold); 
        count=sum(sum(R11(5:size(R11,1)-5,5:size(R11,2)-5)));
     
     
        loop=0;
        while (((count<min_N)|(count>max_N))&(loop<30))
            if count>max_N
                Thrshold=Thrshold*1.5;
            elseif count < min_N
                Thrshold=Thrshold*0.5;
            end
     
            R11 = (R==MX)&(R>Thrshold); 
            count=sum(sum(R11(5:size(R11,1)-5,5:size(R11,2)-5)));
            loop=loop+1;
        end
     
     
    	R=R*0;
        R(5:size(R11,1)-5,5:size(R11,2)-5)=R11(5:size(R11,1)-5,5:size(R11,2)-5);
    	[r1,c1] = find(R);
        %PIP=[r1+cmin,c1+rmin]%% IP 
       points=[r1+cmin,c1+rmin];%% IP
     
       %%%%%%%%%%%%%%%%%%%% Display
     
    %    Size_PI=size(PIP,1);
    %    for r=1: Size_PI
    %    I(PIP(r,1)-2:PIP(r,1)+2,PIP(r,2)-2)=255;
    %    I(PIP(r,1)-2:PIP(r,1)+2,PIP(r,2)+2)=255;
    %    I(PIP(r,1)-2,PIP(r,2)-2:PIP(r,2)+2)=255;
    %    I(PIP(r,1)+2,PIP(r,2)-2:PIP(r,2)+2)=255;
     
    Size_PI=size(points,1);
       for r=1: Size_PI
       I(points(r,1)-2:points(r,1)+2,points(r,2)-2)=255;
       I(points(r,1)-2:points(r,1)+2,points(r,2)+2)=255;
       I(points(r,1)-2,points(r,2)-2:points(r,2)+2)=255;
       I(points(r,1)+2,points(r,2)-2:points(r,2)+2)=255;
       end
     
       imshow(uint8(I))
    end
    si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps=corner(im1,detectionaveclasouris(im1),25);
    j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ??? Error using ==> corner>parseInputs at 186
    Argument 'N' failed validation with error:
    Expected N to be a scalar.
     
    Error in ==> corner at 74
    [I,method,sensitivity_factor,...
     
    Error in ==> trava at 15
     ps=corner(im1,detectionaveclasouris(im1),25);
    merci de m'aider

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Le deuxième argument d'entrée de la fonction corner doit être une chaine de caractère correspondant à la méthode à utiliser.

    Voir le lien vers la documentation donné précédemment par thecrazydonut
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    Merci
    oui ce que j'ai fait, en fait la méthode s'appelle : detectionaveclasouris
    Elle prend comme entrée l'image
    N est le nombre de points d’intérêts que je veux extraire
    donc j'ai entré cette formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    corner(im1,detectionaveclasouris(im1),N);
    Est ce que la fonction corner ne travaille qu'avec les 2 méthodes 'Harris' et 'MinimumEigenvalue' ?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Que renvoi ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    whos detectionaveclasouris
    detectionaveclasouris(im1)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    Le résultat de la fonction detectionaveclasouris est points1
    Lorsque je fais je trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Name          Size            Bytes  Class     Attributes
     
      points1      50x3              1200  double

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    La méthode passée en argument à la fonction corner doit impérativement être une des deux chaines de caractères suivantes :

    • 'Harris'
    • 'MinimumEigenvalue'


    Ton code est donc faux

    D'autre part, le dernier argument N de la fonction corner ne fixe pas précisément le nombre de points renvoyés, mais seulement une valeur maximale.
    Tu obtiens donc au plus N points, mais tu peux en avoir moins selon les informations présentes dans l'image.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    merci Mr
    en fait y a t'il comment faire pour fixer le nombre des points d’intérêts ?
    soit en utilisant la fonction de Harris normale ou même la fonction que j'ai donné dans cette discussion ?
    et merci bien

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    dans quel but vouloir fixer le nombre de points d'intérêts détectés?

    Sinon, il faut choisir un Nmax inférieur au plus petit des nombres de points d'intérêt dans tes images, mais a priori tu ne peux pas connaitre ces nombres avant de les calculer. Donc, tout dépend des images traitées et de l'application souhaités. Explique nous plus clairement ce que tu souhaites faire.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    en fait je prends chaque point d’intérêt de la première image, je prends ses coordonnées, je le cherche dans l'image, je forme un vecteur composé de 8 voisins de ce point, de même pour tous les points de la deuxième image. Puis je compare chaque vecteur associé à chaque point de la première image par tous les autres de la deuxième et j'associe chacun au plus correspondant ( celui que ressemble le plus donc ayant une distance moins que les autres) a la fin j'obtiens des couples que je les stocke dans un vecteur.
    Donc, si j'ai un nombre des points de la première image supérieur que la deuxième alors le vecteur des couples contiendra des répétitions ( par exemple point 1 correspond au point 15, au point 120 et au point 195)
    J'espère que j'ai bien expliqué

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Et pourquoi cela pose-t-il un problème?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    car je veux avoir un vecteur contenant un nombre de couples ( égal au nombre des points d’intérêts) où chaque point a un seul correspondant et un seul
    --> c'est ça le problème

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Plutôt que d'essayer d'imposer le même nombre de points (qui ne te garantie aucunement la correspondance entre tes points), pourquoi ne pas effectuer un post-traitement qui pour chaque point fait correspondre un unique point?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    En fait, j'ai essayé ce post traitement:
    pour que chaque point ait un seul correspondant, on cherche si ce point admet un correspondant dans le vecteur solution ( ce nombre est contenu dans le vecteur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((d>distance) && (ismember(casenumero,vecteur)==1))
    il fallait que la distance soit la plus grande et en même temps l'indice du point n'est pas contenu dans le vecteur.
    Toutefois, je pense que la fonction ismember n'effectue pas le travail que je cherche ( car je trouve des répétitions)
    y a t'il une erreur ou une rectification que je dois le faire dans la fonction ?

Discussions similaires

  1. concernant Harris fonction
    Par aymench1985 dans le forum Images
    Réponses: 0
    Dernier message: 19/06/2013, 23h52
  2. Détecteur de harris : courbures principales de la fonction d'auto corrélation
    Par bilzzbenzbilz dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 09/07/2009, 10h15
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo