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

C++Builder Discussion :

Produit de convolution et détéction de contours


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut Produit de convolution et détéction de contours
    Salut,

    j'utilise cette fonction Filter3 pour faire le produit de convolution par un noyaux de taille 3*3
    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
    void __fastcall TForm1::Filter3(int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int k)
    {
     
    w=Srce->Width-1;
    h=Srce->Height;
    //Intialement
     P = (jRgb*)Srce->ScanLine[0]; // P pointe sur la premiere ligne (y=0) du bitmap Source
     L = (jRgb*)Srce->ScanLine[1]; // L pointe sur la deuxieme ligne (y=1) du bitmap Source
     
            for(int y = 2; y < h; y++)    // on commence la boucle par la "eme ligne (y=2)
        {
        N = (jRgb*)Srce->ScanLine[y];        // N pointe sur la ligne y du bitmap source
        T = (jRgb*)Dest->ScanLine[y-1];   // T pointe sur la ligne y-1 du bitmap Destination
        for(int x = 1; x < w; x++)
            {
            b = (   p0*P[x-1].Blue + p1*P[x].Blue + p2*P[x+1].Blue +
                   p3* L[x-1].Blue + p4*L[x].Blue + p5*L[x+1].Blue +
                   p6* N[x-1].Blue +p7* N[x].Blue +p8* N[x+1].Blue) / k;
     
     
     
            T[x].Blue = (Byte)b;
            T[x].Green = (Byte)b;
            T[x].Red = (Byte)b;
            }
     
            // passage de P  à la ligne suivante
        P = L;
                // passage de L à la ligne suivante
        L = N;
        }
     
     
             ImageOriginale->Repaint();
          ImageOriginale->Visible=true;
     
             return;
    }
    et je l'appelle avec les paramètres du noyaux vertical de sobel ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1->Filter3(-1,0,1,-2,0,2,-1,0,1,4);
    j'ai posté le sujet dans le forum de traitement d'image, on dit que le problème est au niveau du code, alors que ce même code fonctionne nickel avec d'autres filtres comme le gaussien et le moyenneur. je ne sais pas peut etre qu'il faut procéder autrement pour les détecteurs de contours. est ce que vous pouvez m'aider là dessus?

    Merci d'avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    @ SmileSoft,
    Pourquoi ne pas utiliser Opencv? c'est plus facile non?

  3. #3
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut
    Citation Envoyé par dz_robotix Voir le message
    @ SmileSoft,
    Pourquoi ne pas utiliser Opencv? c'est plus facile non?
    merci dz_robotix pour la réponse, en ce qui concerne opencv je l'ai jamais utilisé. y a t-il une piste?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    Pas seulement une piste mais plutôt toutes les pistes concernant la vision artificielle.
    Par exemple pour la déction de contour, t'as plusieurs choix, sobel, canny,... ou bien appeler directement une routine cvFindContour(image_in, image_out,...).

    Si tu veux je t'aiderai à l'installer et la configurer sous BCB.

    Cordialement.

  5. #5
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut
    Citation Envoyé par dz_robotix Voir le message
    Si tu veux je t'aiderai à l'installer et la configurer sous BCB.

    Cordialement.
    merci dz_robotix oui j'aimerai bien, puis que je n'ai pas le résultat attendu avec mon code et je n'arrive toujours pas à situer le problème.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    D'accord pas de problème,
    Commences pas la télécharger.

    http://sourceforge.net/projects/opencvlibrary/

    Après je te colle ici en pièce jointes les LIB que j'ai importer avec IMPLIB.
    Par la suite il suffit juste d'ajouter les Include et les LIB au projets.

  7. #7
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut
    téléchargement fini, je l'installe normalement ou y a t-il des conventions à suivre?

    merci

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    oui installation normale,

    puis on passe à l'ajout des répertoire

  9. #9
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut
    salut,
    Citation Envoyé par dz_robotix Voir le message
    oui installation normale,

    puis on passe à l'ajout des répertoire
    opencev est bien installée j'attends la suite

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    Salut SmileSoft,
    Je m'excuse j'été un peu pris le weekend,
    reprenons le travail:

    une fois la librairie installée, il faudrait ajouter les includes dans l'includepath du projet (dans les directories...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Les Includes PATH:
    [OPENCV FOLDER]\cv\include
    [OPENCV FOLDER]\cvaux\include
    [OPENCV FOLDER]\cxcore\include
    [OPENCV FOLDER]\otherlibs\_graphics\include
    [OPENCV FOLDER]\otherlibs\cvcam\include
    [OPENCV FOLDER]\otherlibs\highgui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Les  Library PATH
    [OPENCV FOLDER]\bin
    [OPENCV FOLDER]\_graphics\lib
    [LIB_BUILDER]
    Attention:
    1/ le dossier [LIB_BUILDER]: est le dossier compréssé que je te joins ici, donc décompresse le contenu.
    2/ tu dois aussi ajouté les fichier lib de ce dernier (lib_builder) à ton projet (avec le petit bouton plus vert ;-) ).


    Exemple:
    détection de contour à partir d'un fichier avi, si tu veux le lancer à partir d'une webcam décommentes la ligne (cvCaptureFromCAM(0))

    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
     
    #include <stdlib.h>
    #include <cv.h>
    #include <cvaux.h>
    #include <cxcore.h>
    #include <highgui.h>
    #include <stdio.h>
     
    Void Laplacien_Apartir_Dune_VIDEO(){
    IplImage* laplace = 0;
        IplImage* colorlaplace = 0;
        IplImage* planes[3] = { 0, 0, 0 };
        CvCapture* capture = 0;
        char* c="blabla.avi";
     
     
     
            capture = cvCaptureFromAVI( c); 
    //  capture = cvCaptureFromCAM(0);  // pour lancer la capture à partir d'une webcam 
     
        if( !capture )
        {
            fprintf(stderr,"Could not initialize capturing...\n");
            return -1;
        }
     
        cvNamedWindow( "Laplacian", 0 );
     
        for(;;)
        {
            IplImage* frame = 0;
            int i;
     
            frame = cvQueryFrame( capture );
            if( !frame )
                break;
     
            if( !laplace )
            {
                for( i = 0; i < 3; i++ )
                    planes[i] = cvCreateImage( cvSize(frame->width,frame->height), 8, 1 );
                laplace = cvCreateImage( cvSize(frame->width,frame->height), IPL_DEPTH_16S, 1 );
                colorlaplace = cvCreateImage( cvSize(frame->width,frame->height), 8, 3 );
            }
     
            cvCvtPixToPlane( frame, planes[0], planes[1], planes[2], 0 );
            for( i = 0; i < 3; i++ )
            {
                cvLaplace( planes[i], laplace, 3 );
                cvConvertScaleAbs( laplace, planes[i], 1, 0 );
            }
            cvCvtPlaneToPix( planes[0], planes[1], planes[2], 0, colorlaplace );
            colorlaplace->origin = frame->origin;
     
            cvShowImage("Laplacian", colorlaplace );
     
            if( cvWaitKey(10) >= 0 )
                break;
        }
     
        cvReleaseCapture( &capture );
        cvDestroyWindow("Laplacian");
     
    }
    Bon courage;
    Fichiers attachés Fichiers attachés

  11. #11
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut
    Merci bien dz_robotix, j'ai pris les notes, je passerai le soir si je rencontre des difficultés.

Discussions similaires

  1. Produit de convolution
    Par top111 dans le forum MATLAB
    Réponses: 9
    Dernier message: 19/06/2008, 14h48
  2. fft en 3 dimension pour un produit de convolution
    Par mattthieu dans le forum Calcul scientifique
    Réponses: 9
    Dernier message: 09/06/2008, 11h38
  3. détéction de contours
    Par charly dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 02/08/2007, 01h57
  4. produit de convolution en C
    Par nickoko dans le forum C
    Réponses: 8
    Dernier message: 21/06/2006, 16h10
  5. Détéction de contours
    Par Rafoo dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 12/08/2005, 09h39

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