View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS

OpencvbgsMOG

Main.OpencvbgsMOG History

Hide minor edits - Show changes to output

Changed lines 137-138 from:
cam1 = new GSCapture(this, widthCapture, heightCapture,fpsCapture,"v4l2src","/dev/video0"); // Initialise objet GSCapture désignant webcam
to:
         cam1 = new GSCapture(this, widthCapture, heightCapture); // forme simplifiée
//
cam1 = new GSCapture(this, widthCapture, heightCapture,fpsCapture,"v4l2src","/dev/video0"); // Initialise objet GSCapture désignant webcam
Added lines 81-86:

!!! Fonctions de l'objet bsgMOG

* Lors de l'initialisation, un objet bsgMOG est créé en interne par la librairie JavacvPro.

* L'ensemble des propriétés de l'objet sont accessibles au besoin par les fonctions dédiées. Voir : http://www.mon-club-elec.fr/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_video.BackgroundSubtractorMOG.html
Changed line 88 from:
*
to:
* Soustraction du fond et détection d'objet en mouvement.
Added lines 31-36:

!! Remarques techniques

* Les objets de l'avant-plan qui restent immobiles vont peu à peu être inclus dans le fond et laisseront une "empreinte" que l'on retrouvera lorsque l'objet passera à nouveau dans la zone d'immobilisation.

* En couplant des fonctions à la fonction sum(), on pourra déclencher des algorithmes de traitement uniquement lorsque un avant plan significatif sera détecté : par exemple une capture vidéo ou une analyse de forme.
Added lines 11-12:

%center%(:vimeo 32363626:)
Changed lines 24-25 from:
* Voir également : absDiff(), accumulate(), bgsMOG2Init(), bgsMOG2Apply()
to:
* Voir également : absDiff(), accumulate(), bgsMOG2Init(), bgsMOG2Apply(), sum()
Changed line 62 from:
* history : nombre de frame à utiliser pour le modèle statistique. 200 par défaut
to:
* history : nombre de frame à utiliser pour le modèle statistique. 200 par défaut. Plus on utilise d'image, et plus l'atténuation sera lente.
Changed line 72 from:
* mode : fixe le mode de fonctionnement de l'algorithme. Utiliser 0 ou - 1
to:
* mode : fixe le mode de fonctionnement de l'algorithme. Utiliser 0 en mode statique ou - 1 pour une actualisation automatique du modèle statistique (le mieux).
Changed line 71 from:
* iplImgDest : image OpenCV destination
to:
* iplImgDest : image OpenCV destination monocanal. La fonction renvoie le masque de l'avant plan c'est à dire une image binarisée où les pixels considérés comme l'avant plan sont en blanc.
Changed line 10 from:
%center%/mes_images/javacvpro/javacvpro_exemple_gsvideo_bgsMOG.png
to:
%center%Path:/mes_images/javacvpro/javacvpro_exemple_gsvideo_bgsMOG.png
Added lines 9-10:

%center%/mes_images/javacvpro/javacvpro_exemple_gsvideo_bgsMOG.png
Added lines 82-85:

%center%%red% L'exemple complet suivant est à copier dans Processing et est exécutable immédiatement si vous disposez d'une webcam :

Changed lines 88-95 from:

(:sourcend:)

%center%%red% L'exemple complet suivant est à copier dans Processing et est exécutable immédiatement si vous êtes connectés à internet :


(:source lang=processing :)

to:
// Programme d'exemple de la librairie javacvPro
// par X. HINAULT - novembre 2011
// Tous droits réservés - Licence GPLv3

// Montre exemple utilisation de la fonction bgsMOGInit() et bgsMOGApply()


import codeanticode.gsvideo.*; // importe la librairie vidéo GSVideo qui implémente GStreamer pour Processing (compatible Linux)
// librairie comparable à la librairie native vidéo de Processing (qui implémente QuickTime..)- Voir Reference librairie Video Processing
// cette librairie doit être présente dans le répertoire modes/java/libraries du répertoire Processing (1-5)
// voir ici : http://gsvideo.sourceforge.net/
// et ici : http://codeanticode.wordpress.com/2011/05/16/gsvideo-09-release

import monclubelec.javacvPro.*; // importe la librairie javacvPro

GSCapture cam1; // déclare un objet GSCapture représentant une webcam
// L'objet GSCapture étend PImage - se comporte comme un conteneur des frames issues de la webcam

OpenCV opencv; // déclare un objet OpenCV principal

PImage imgSrc;

int widthCapture=320;
int heightCapture=240;
int fpsCapture=20;

void setup(){ // fonction d'initialisation exécutée 1 fois au démarrage

        size(widthCapture*2,heightCapture);

//======== Initialisation Objets GSVideo (capture et/ou lecture video =========

// GSCapture(this, int requestWidth, int requestHeight, [int frameRate], [String sourceName], [String cameraName])
cam1 = new GSCapture(this, widthCapture, heightCapture,fpsCapture,"v4l2src","/dev/video0"); // Initialise objet GSCapture désignant webcam
// largeur et hauteur doivent être compatible avec la webcam - typiquement 160x120 ou 320x240 ou 640x480...
// Meilleurs résultats avec framerate webcam entre 20 et 30 et frameRate programme idem ou multiple plus grand (40 pour 20 par ex)
// la liste des webcam installées sous Ubuntu (Gnu/Linux) est donnée par la commande : ls /dev/video*

// cam1.play();  // démarre objet GSCapture = la webcam - version GSVideo avant 0.9
cam1.start();  // démarre objet GSCapture = la webcam - version GSVideo après 0.9

//======== Initialisation Objets OpenCV (librairie javacvPro : traitement d'image et reconnaissance visuelle) =========

opencv = new OpenCV(this); // initialise objet OpenCV à partir du parent This
        opencv.allocate(widthCapture,heightCapture); // crée le buffer image de la taille voulue


        //--- Initialisation objet MOG --- Un objet bsgMOG est déclaré en interne
        //opencv.bgsMOGInit(); // initialise bgsMOG avec paramètres par défaut
        // default : history = 200; nmixture=5; backgroundRatio (threshold) = 0.7; noiseSigma=15;       

        opencv.bgsMOGInit(20, 5, 0.5, 10); // initialise bgsMOG avec paramètres voulus

}


void  draw() { // fonction exécutée en boucle

  if (cam1.available() == true) { // si une nouvelle frame est disponible sur la webcam
    cam1.read(); // acquisition d'un frame

    imgSrc=cam1.get(); // récupère l'image GS video dans Pimage
    opencv.copy(imgSrc); // charge l'image dans le buffer openCV

    //opencv.copy(cam1.get()); // autre possibilité - charge directement l'image GSVideo dans le buffer openCV

    image(opencv.getBuffer(), 0, 0); // affiche image

    opencv.bgsMOGApply(opencv.Buffer, opencv.BufferGray, 0); // ajoute un frame à l'objet BackGround Subtractor MOG
    // la fonction initialise est appelée en interne au premier passage si besoin

    image(opencv.getBufferGray(), widthCapture, 0); // affiche image



  } // fin if available

} // fin draw
Added line 26:
** article présentant l'algorithme utilisé : http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf
Changed lines 12-13 from:
* Ces fonctions implémentent une fonction native avancée de la librairie OpenCV qui permet de réaliser la soustraction du fond au sein d'une image en se basant sur les "Mixture Of Gaussian" (MOG). Le sigle bgs signifie "BackGround Subtractor" (soustracteur d'arrière-plan).
to:
* Ces fonctions implémentent un objet natif avancé de la librairie OpenCV qui permet de réaliser la soustraction du fond au sein d'une image issue d'un flux vidéo en se basant sur les "Mixture Of Gaussian" (MOG). Le sigle bgs signifie "BackGround Subtractor" (soustracteur d'arrière-plan).
Changed lines 22-23 from:
* Voir également : accumulate(), bgsMOG2Init(), bgsMOG2Apply()
to:
* Voir également : absDiff(), accumulate(), bgsMOG2Init(), bgsMOG2Apply()
Added line 41:
Changed lines 43-44 from:
public void bgsMOGInit(int history, int nmixtures, double backgroundRatio, double noiseSigma)
opencv.bsgMOGInit(); // initialise l'objet MOG
to:
opencv.bgsMOGInit(history, nmixtures, backgroundRatio, noiseSigma); // initialise l'objet MOG avec paramètres
opencv.bsgMOGInit(); // initialise l'objet MOG avec : history = 200; nmixture=5; backgroundRatio (threshold) = 0.7; noiseSigma=15;
Added lines 55-64:

!!! Fonction bsgMOGInit()

* opencv : un objet OpenCV déclaré avec le constructeur [[OpencvOpencv|OpenCV]]
* history : nombre de frame à utiliser pour le modèle statistique. 200 par défaut
* nmixture : nombre de "Mixture Of Gaussian" à utiliser, c'est à dire le nombre population de pixels à utiliser. 5 par défaut
* backgroundRatio : seuil à utiliser - 0.7 par défaut
* noiseSigma : paramètre fixant la gestion du bruit. 15 par défaut

!!! Fonction bsgMOGApply()
Changed lines 14-15 from:
* Cette fonction implémentent un objet qui va mémoriser n frames afin de réaliser un modèle statistique de l'évolution des pixels. Ce modèle va être analysé afin d'en extraire les populations de pixels cohérentes entre-elles ce qui va permettre de dégager le fond.
to:
* Ces fonctions implémentent un objet qui va mémoriser n frames afin de réaliser un modèle statistique de l'évolution des pixels au fil du temps. Ce modèle va être analysé afin d'en extraire les populations de pixels cohérentes entre-elles ce qui va permettre de dégager le fond (background) de l'avant-plan (foreground).

* Cet algorithme sera surtout efficace pour un avant plan mobile par rapport au
fond.
Changed lines 22-23 from:
* Voir également : bgsMOG2Init(), bgsMOG2Apply()
to:
* Voir également : accumulate(), bgsMOG2Init(), bgsMOG2Apply()
Deleted line 26:
Changed lines 30-35 from:
to:
public void bgsMOGInit()
public void bgsMOGInit(int history, int nmixtures, double backgroundRatio, double noiseSigma)

public void bgsMOGApply()
public void bgsMOGApply(opencv_core.IplImage iplImgSrcIn, opencv_core.IplImage iplImgDestIn, int modeIn)

Added line 40:
!!! Initialisation
Changed lines 42-43 from:
to:
public void bgsMOGInit(int history, int nmixtures, double backgroundRatio, double noiseSigma)
opencv.bsgMOGInit(); // initialise l'objet MOG
Changed lines 46-52 from:
to:
!!! Utilisation

(:source lang=processing :)
opencv.bgsMOGApply(iplImgSrc, iplImgDest, mode); // ajoute une image au modèle statistique du MOG
opencv.bgsMOGApply(); // ajoute une image au modèle statistique du MOG - source = Buffer principal et destination = Buffer Gray
(:sourcend:)

Changed lines 56-57 from:
*
to:
* iplImgSrc : image OpenCV source
* iplImgDest : image OpenCV destination
* mode : fixe le mode de fonctionnement de l'algorithme. Utiliser 0 ou - 1

Changed line 62 from:
Aucune
to:
Aucune. L'image résultante du traitement est dans l'image destination.
Changed lines 8-11 from:
%center%Path:/mes_images/javacvpro/bandeau_javacvpro_processing_opencv_400.png
%center%%width=400px%[[Path:|Path:]]

to:
%center%Path:/mes_images/javacvpro/Double_Gauss.png
Added lines 21-24:

* Pour plus d'informations théoriques :
** http://fr.wikipedia.org/wiki/Mod%C3%A8le_de_m%C3%A9langes_gaussiens

Added lines 1-76:
(:notitle:)
(:include HautPageReference:)\\
[[Main.LibrairieJavacvPro|Librairie JavacvPro]]

! Classe OpenCV : bgsMOGInit(), bgsMOGApply()
----

%center%Path:/mes_images/javacvpro/bandeau_javacvpro_processing_opencv_400.png
%center%%width=400px%[[Path:|Path:]]


!! Description

* Ces fonctions implémentent une fonction native avancée de la librairie OpenCV qui permet de réaliser la soustraction du fond au sein d'une image en se basant sur les "Mixture Of Gaussian" (MOG). Le sigle bgs signifie "BackGround Subtractor" (soustracteur d'arrière-plan).

* Cette fonction implémentent un objet qui va mémoriser n frames afin de réaliser un modèle statistique de l'évolution des pixels. Ce modèle va être analysé afin d'en extraire les populations de pixels cohérentes entre-elles ce qui va permettre de dégager le fond.

* Toute la puissance de cette fonction réside dans le fait de n'utiliser que une ou 2 lignes dans un programme Processing pour implémenter un algorithme complexe.

* La documentation de le librairie native OpenCV :http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog

* Voir également : bgsMOG2Init(), bgsMOG2Apply()

!! Déclaration source java

(:source lang=java :)

(:sourcend:)

!! Syntaxe

(:source lang=processing :)

(:sourcend:)


!! Paramètres

* opencv : un objet OpenCV déclaré avec le constructeur [[OpencvOpencv|OpenCV]].
*

!! Valeur renvoyée

Aucune

!! Utilisation type

*

!! Exemple

(:source lang=processing :)


(:sourcend:)

%center%%red% L'exemple complet suivant est à copier dans Processing et est exécutable immédiatement si vous êtes connectés à internet :


(:source lang=processing :)


(:sourcend:)


!! Commentaires utilisateurs

>>bgcolor=#dfd border='3px dotted green'<<

Aucun

>><<

(:include BasPageReference:)

Cette page est une création originale de Xavier HINAULT - Tous droits réservés - 2011