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

OpenCV Discussion :

Détection de changement


Sujet :

OpenCV

  1. #1
    mmx
    mmx est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Points : 47
    Points
    47
    Par défaut Détection de changement
    Bonjour,


    je cherche à récupérer les coordonnes (x, y) des points d'une image ayant changé de luminosité par rapport à une image prise un peu plus tôt. En gros l'image à un fond tout noir et est parsemée de tâches lumineuses pour lesquelles je dois détecter leur changement de luminosité (qui se traduit en fait la plupart du temps par une diminution de la surface de la tache).

    J'aurais besoin de la marche à suivre. Je pensais faire une soustraction d'une image de l'instant t et l'instant t+dt mais ça implique un petit temps de latence dans le traitement... Je me demande aussi si j'ai besoin de binarisé ? je sais qu'après il faut que je fasse une détection des composantes connexes pour déterminer un couple (x, y) pour chacune des différentes taches mais je ne sais pas comment on fait ça non plus :s


    Enfin, merci pour votre aide, car y a du boulot

  2. #2
    Membre régulier Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Points : 123
    Points
    123
    Par défaut
    Salut,

    Pour ce qui est de la soustraction, ça me paraît pas une mauvaise idée, par contre je ne saisis pas bien l'histoire de latence. Tu devras de toute façon te référer à une image antérieure pour savoir s'il y a changement non ?

    Sinon, vu ton problème, ça serait plus simple de binariser (exctraction des formes) quitte à retravailler après en niveau de gris si tu as besoin de quantifier le changement de luminosité. Pour l'extraction de tes objects, regarde du côté de cvblobslib.

    A+

    Hunta
    newbie un jour, newbie toujours
    n'oubliez pas le

  3. #3
    mmx
    mmx est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Points : 47
    Points
    47
    Par défaut
    Merci

    Bon, j'ai avancé, j'obtiens maintenant une image avec les taches lumineuses qui sont colorées (toutes des couleurs différentes, noir exlu) et je cherche maintenant à récupéré le centre de gravité de ces tâches de couleur. j'ai créé une pile pour mettre les abscisses et ordonnées des centres de gravité mais j'ai un problème d'algo...

    Le but c'est de parcourir l'image pixel par pixel, de récupérer la couleur du pixel ( je ne connais pas d'autre moyen que de chopé les valeurs R, G et B du pixel) puis....

    Si (couleur_pixel == noir) => on ne fait rien
    Si (couleur_pixel != noir ) //on arrive ici sur la première couleur mais cette condition va être vraie pour beaucoup de couleur, il faudra rentré dans la boucle que pour des couleurs que je n'ai pas encore traité... je m'embrouille les pinceaux :'(

  4. #4
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    1. Tu doit compter le nombre de couleur qu'il y a ds ton image.
    2. Tu creer un tableaux avec le nombre de couleurs qui contiendra ton CvPoint (Dans le code c'est ConCompo car je garde aussi la bouding box et l'area, mais si tu as juste besoin de X,y utilise le CvPoint)
    3. Tu regarde tous les pixels non-noir, obtient leur couleurs (ID), et tu remplis le tableaux selon leur ID.


    Ca te donne un truc de ce genre:

    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
     
    typedef struct _ConCompo {
     
    	//Bounding Box position
    	int min_x,max_x;
    	int min_y,max_y;
     
    	//Center position
    	int x,y;
     
    	//Area
    	int area;
     
    } ConCompo;
     
     
    void fillConCompo(ConCompo *blobs,const int nof_blobs, const IplImage *im) {
    	int x,y;
    	uchar *line, id; 		//Pointer on the image
     
     
    	if (im->nChannels!=1 || im->depth!=IPL_DEPTH_8U) {
    		printf("Image input is not valid\n");
    		fflush(stdout);
    		return;
    	}
     
    	//Itarate over the whole image
    	for (y=0; y<im->height; y++) {
    		line=(uchar*)(im->imageData+y*im->widthStep);
    		for (x=0; x<im->width; x++) {
     
    			//If pixel is not black
    			if (line[x]) {
    				//The labels start from 1 but the array of blobs from 0
    				id=line[x]-1;
    				if(id < nof_blobs) {
     
    					//Set Max Values (Bounding Box)
    					if(blobs[id].max_x < x) blobs[id].max_x = x;
    					if(blobs[id].max_y < y) blobs[id].max_y = y;
    					//Set Min Values (Bouding Box)
    					if(blobs[id].min_x > x) blobs[id].min_x = x;
    					if(blobs[id].min_y > y) blobs[id].min_y = y;
    					//Set Center Position
    					blobs[id].x+=x;
    					blobs[id].y+=y;
    					//Set The area
    					blobs[id].area++;
     
     
    				}
    			}
    		}
    	}
     
    	for(id=0;id<nof_blobs;id++) {
    		blobs[id].x/=blobs[id].area;
    		blobs[id].y/=blobs[id].area;
    	}
    }

  5. #5
    mmx
    mmx est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Points : 47
    Points
    47
    Par défaut
    Salut,


    merci bien

    J'ai donc avancé. Maintenant j'ai récupéré les centres de gravité. J'ai juste stocké les points dans un NSMutableArray (et oué objectiveC ^^).

    Bon, de toute manière j'ai besoin des centres de gravité pour plus tard mais j'ai essayé de m'en servir pour la détection du changement de luminosité de ces taches et ça ne marche pas. Je voulais récupéré le changement de luminosité de ce point particulier, déjà c'est pas très robuste, et d'autre part je le compare à quoi ? si je fais une différence d'image entre une à l''instant t-1 et l'autre à l'instant t, je perds l'info s'il n'y a pas de changement entre les deux images...

    J'ai donc besoin d'une sorte de calibration de mon image, quelque chose d'intelligent qui parcours mon image source et modifie les taches de manière à augmenter la "luminosité" des taches un peu flaiblarde, et au diminuer celle des taches très lumineuse, de manière à homogénéiser tout ça et pouvoir comparer l'image courante à 1 seul paramètre homogène à toutes les taches...

    Vous auriez pas une petite idée pour faire ça ? je dois taper dans les histogrammes ? j'en sais rien du tout :'(


    Ca vous parait débile et/ou inutile ? C'est ce qui m'est venu en réfléchissant un peu mais je sais pas trop si c'est viable...

    Merci d'avance

Discussions similaires

  1. Détection de changement dans un ListView
    Par mpereg dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/03/2008, 07h25
  2. [SQL] Détection du changement de valeur d'une variable
    Par micatmidog dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/06/2007, 20h22
  3. Détection des changements de valeur
    Par blister58 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/07/2006, 10h21
  4. détection de changement brusque des couleurs
    Par zidenne dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/02/2006, 21h26
  5. Réponses: 2
    Dernier message: 23/01/2006, 11h55

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