Le 07 juillet 2005 - 10 h 00, Gosseyn a écrit :
Bonjour,
J'ai deja fait cela. Sinon, il existe une solution Open Source GPL qui s'appelle motion en C et non en Java.
Voici comment j'ai procédé. J'ai gardé les couelurs d'origine de l'image et pour chaque pixel je compare les valeurs RGB. Sachant que les capteurs CCD ne sont pas parfaits, j'applique un coef de tolerance. Je considère que les pixels sont reellement differnts si la difference des valeurs RGB est superieure à la tolerance. D'autre part je considere qu'il y a mouvement si on a un nombre minimum de pixels differents. En jouant sur ces 2 parametres, on peut affiner la detection en la rendant plus ou moins sensible.
Pour mon cas, j'ai retenu un minimum de 200 pixels differents pour declarer un mouvement et la difference RGB devait etre superieure à 30, pour une image en 640x480.
Apres on peut aussi mesurer la distance entre 2 pixels differents car en general, c'est tout une zone qui bouge. et/ou choisir des zones...
Voala, hope that helps.
|
Je viens de me rendre compte que c ets ce que je fait depuis le debut.
Je passe en grayscale pour avoir une seule bande a traiter et je fait un diff.
Je recupere ensuite un histogramme de l image diff.
cet histogramme me donne pour chaque valeur de 0->255 le nombre de pixels qui ont cette valeur.
Ce que je fesais avant :
Je prenais la somme de tous les pixels dont la valeur etait inferieure a 10. En gros, ca reviens exactement au meme que toi puisque si un pixel un uen valeur de 50 par exemple, ca veut dire que le diff a donne 50 => que y avait une difference entre les pixels originaux.
Cette somme correspond chez moi au nombre de pixel qui restent tolere (qui sont noirs).
Ensuite je fais un ratio de ce nombre par les pixels au total.
J ai donc bien deux parametres. Mais je vais essayer de changer, pour faire comme tu as fait, c-a-d faire une somme de pixels qui ne sont pas dans les limites, que je vais fixer a 30.
J ai aussi essayer deux methodes differentes de diff.
1. avec le JAI
2. manuellement, en recuperant les deux arrays de la bande grayscale pour chaque image et en fesant un tableau donc le contenu est la valeur absolue de la difference des deux autres
Les resultats donnent une concentration de noirs plus grande pour le jai (il y a un gros groupe de pixel dont la valeur est inf a 10) alors que la methode a la main donne une concentration plus normalisee ou la, la valeur a 30 serait + efficace et donnerait un meileur ratio
Jvais refaire d autres tests.
a+