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

Traitement d'images Discussion :

[tracking video] La soustraction


Sujet :

Traitement d'images

  1. #1
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut [tracking video] La soustraction
    salut,

    Pour la detection de mouvement sur video il est possible d'utiliser une image de reference(image de fond) qui permet de servir de comparaison aux autres images , via la soustraction(aparement largement utilisée) cependant,je viens de me rendre compte qu'il y a une zone d'ombre pour moi a ce sujet en effet mes images etant codée en 8 bits(0 à 255) si un pixel X sur l'image de reference vaut par exemple 100 et que ce meme pixel X est supérieur a 100 sur l'image traitée alors ma soustraction me donnera toujours 0(equivalent a aucun mouvement ,ce qui est faux)

    alors je me demande comment cela fonctionne!est ce qu'en fait les pixels sont codés sur 16 bits(-256 a 255)

    parce qu'en tout cas sous OpenCV j'ai des problemes qui semblent venir de cela(objet en mouvement plus clair que le fond)

    merci de votre aide

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jim_Nastiq
    salut,
    alors je me demande comment cela fonctionne!est ce qu'en fait les pixels sont codés sur 16 bits(-256 a 255)
    plusieurs manières de faire, mais ce n'est pas que les pixels sont codés sur un nombre de bits différents.

    Pour le calcul on peut utiliser une variable de stockage double, puis on re-normalise..., ou on le fait au vol...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    ok ! merci pour ta reponse! mais sous OpenCV(si tu connais) la soustraction est une fonction deja faites je l'utilise simplement en faisant son appel(cvSub) je pense que intel a prevu le coup tout de meme... je vais voir d'ou peut venir le probleme!
    encore merci

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  4. #4
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Tu parles de la DFD (Difference entre Frames) ?
    Si c'est le cas, ce n'est plus beaucoup utilisé, aujourd'hui, on se sert de block matching, c'est à dire qu'on cherche, dans l'image à prédire, le vecteur de mouvement tel que, pour un bloc donné dans l'image de référence, la correspondance avec le bloc dans l'image à prédire soit la meilleure possible.

    Les vecteurs de mouvement sont codés entre +-15 pixels en général, et l'on code de manière spécifique (au niveau du codeur entropique). Mais en général dans le code, c'est un simple char (signé) qui est utilisé.
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  5. #5
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    ok, merci! t'aurais des liens ou des exemples de cet algo par hasard?

    je vais voir ce que je trouve sur le sujet...

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Si ça peut en aider certains, je travail sur un flux MJPEG venant d'une caméra Axis M1011 actuellement. J'ai donc utilisé JOpenCV que j'ai modifier suivant mes besoins pour faire de la détection de mouvements.

    Mon code prend 2 frames, il passe les frames en niveaux de gris, fait un filtre median pour enlever le bruit puis passe en binaire (noir et blanc) avec un threshold. Pour finir il suffit de soustraire les 2 images pour avoir le mouvement en blanc sur fond noir.
    Je garde la dernière frame en niveaux de gris que j'additionne au mouvement, ce qui me donne une image avec le mouvement superposé.



    J'ai pas encore réussi à enlever la barbe avec OpenCV

    Voici le code Java qui fait la différence entre 2 frames :

    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
     
    public void compare(BufferedImage image1, BufferedImage image2) throws IOException {
     
            // Temporary grayscale image
            JIplImage temp = null;
            // Threshod parameters
            int floor = 60;
            int max   = 255;
     
            // Original colored image
            JIplImage src1 = new JIplImage(image1);
            // Grayscale image
            JIplImage dst1 = new JIplImage(image1.getWidth(), image1.getHeight(), 8, 1);
     
            // Processing
            JOpenCV.cvCvtColor(src1, dst1, 6);
            temp = new JIplImage(image1.getWidth(), image1.getHeight(), 8, 1);
            JOpenCV.cvSmooth(dst1, temp, JOpenCV.MEDIAN, 5, 0, 0, 0);
            JOpenCV.cvThreshold(temp, dst1, floor, max, 0);
     
            // Original colored image
            JIplImage src2 = new JIplImage(image2);
            // Grayscale image
            JIplImage dst2 = new JIplImage(image2.getWidth(), image2.getHeight(), 8, 1);
            JIplImage gray = new JIplImage(image2.getWidth(), image2.getHeight(), 8, 1);
     
            // Processing
            JOpenCV.cvCvtColor(src2, gray, 6);
            temp = new JIplImage(image2.getWidth(), image2.getHeight(), 8, 1);
            JOpenCV.cvSmooth(gray, temp, JOpenCV.MEDIAN, 5, 0, 0, 0);
            JOpenCV.cvThreshold(temp, dst2, floor, max, 0);
     
            // Image substraction
            JIplImage dst = new JIplImage(image2.getWidth(), image2.getHeight(), 8, 1);
     
            JOpenCV.cvSub(dst2, dst1, temp, 0);
            JOpenCV.cvSmooth(temp, dst1, JOpenCV.MEDIAN, 13, 0, 0, 0);
     
            // Image addition
            JOpenCV.cvAdd(dst1, gray, dst, 0);
     
            // Display
            imgSrc1.setImage(image1);
            imgSrc2.setImage(dst2.getBufferedImage());
            imgDst.setImage(dst.getBufferedImage());
     
            // Free memory
            dst.deallocate();
            dst1.deallocate();
            dst2.deallocate();
            gray.deallocate();
            src1.deallocate();
            src2.deallocate();
            temp.deallocate();
        }

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    soit A ton image de ref (fond) et B ton image a verifier, tu fait (A-B) + (B-A) vu que tes calculs sont clampés a 0 tu aura une image des differences (en positif et negatif) entre tes deux images
    il y a 10 types de personnes:
    celles qui savent compter en binaire
    et celles qui ne savent pas!

Discussions similaires

  1. Développement jeux vidéo : quelles bases à avoir absolument ?
    Par Ezechiel dans le forum Développement 2D, 3D et Jeux
    Réponses: 175
    Dernier message: 20/02/2018, 16h14
  2. tracking d'un objet dans un video
    Par jean_pierr dans le forum Images
    Réponses: 1
    Dernier message: 18/05/2012, 14h19
  3. Tracking d'un objet dans une video
    Par co2gaz dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 13/05/2011, 18h38
  4. Réponses: 0
    Dernier message: 11/07/2009, 15h46
  5. Adresse des polices de caractères dans la RAM video ?
    Par Anonymous dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 27/05/2002, 17h29

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