Question

C'est une question assez large. Quels sont les outils / bibliothèques existants pour prendre deux photographies non identiques mais extrêmement similaires et identifier les différences spécifiques entre elles?

Un exemple serait de prendre une photo de mon canapé vendredi après le nettoyage de ma petite amie et avant un long week-end de visites d'amis, de boissons et d'un groupe de rock. Deux jours plus tard, je prends une deuxième photo du canapé; L’éclairage est identique, le canapé n’a pas bougé d’un millimètre et j’utilise un trépied dans un lieu fixe.

Quels outils puis-je utiliser pour générer un diff des images ou une troisième image heatmap des différences? Existe-t-il des outils pour .NET?

Était-ce utile?

La solution

Consultez l'article de Andrew Kirillov sur CodeProject. Il a écrit une application C # en utilisant la AForge.NET bibliothèque de vision par ordinateur pour détecter les mouvements. Sur le site Web AForge.NET, il existe une discussion de deux différences de cadre. pour la détection de mouvement.

Autres conseils

Cela dépend en grande partie du format et de la compression de l'image. Mais à la fin de la journée, vous prenez probablement deux rasters et comparez-les pixel par pixel.

Jetez un coup d'oeil à l’ utilitaire de différence d’images perceptuelles .

La façon la plus évidente de voir chaque petite différence, normalement presque imperceptible, serait de XOR les données de pixels. Si l'éclairage est même légèrement différent, cela pourrait être trop. Différencer (soustraire) les données de pixels peut être ce que vous recherchez, selon la subtilité des différences.

Vous pouvez commencer par utiliser une riche bibliothèque de traitement d'images, telle que messagerie instantanée . . Vous pouvez jouer avec ses opérateurs de manière interactive avec l'outil IMlab , appeler directement de C ou C ++ ou utiliser le contraignant Lua vraiment décent de le conduire de Lua. Il prend en charge un large éventail d'opérations sur les bitmaps, ainsi qu'une bibliothèque extensible de formats de fichiers.

Même si vous n'avez délibérément rien déplacé, vous pouvez utiliser un algorithme tel que SIFT pour obtenir un bon alignement de la qualité des sous-pixels entre les images. Sauf si vous souhaitez traiter la caméra comme étant figée et détecter le mouvement du canapé également.

J'ai écrit cette application .NET gratuite à l'aide de la boîte à outils créée par mon entreprise (DotImage). Il a un algorithme très simple, mais le code est open source si vous voulez jouer avec, vous pouvez l'adapter aux classes .NET Image si vous ne voulez pas acheter une copie de DotImage.

http: / /www.atalasoft.com/cs/blogs/31appsin31days/archive/2008/05/13/image-difference-utility.aspx

C'est une question intéressante. Je ne peux vous renvoyer à aucune bibliothèque en particulier, mais le processus dont vous parlez est fondamentalement un cas minimal de compensation de mouvement. C’est ainsi que la vidéo MPEG (MP4, DIVX, peu importe) parvient à compresser extrêmement bien la vidéo; Vous pouvez consulter MPEG pour obtenir des informations sur la manière dont ces algorithmes de compensation de mouvement sont implémentés.

Une autre chose à garder à l’esprit; La compression JPEG est une compression basée sur des blocs. Une grande partie des avantages apportés par MPEG est de faire une comparaison en bloc. Si la plus grande partie de votre image (l'arrière-plan, par exemple) est identique d'une image à l'autre, ces blocs resteront inchangés. C'est un moyen rapide de réduire la quantité de données à comparer.

utilisez simplement les classes de création d'image .net, créez un nouveau bitmap () x 2 et examinez le fichier R & amp; G & amp; Les valeurs B de chaque pixel, vous pouvez également consulter les valeurs A (Alpha / transparence) si vous le souhaitez lors de la détermination de la différence.

Une note également, en utilisant la méthode getPixel (y, x) peut être très lente, il existe un autre moyen d’obtenir l’image entière (moins élégante) et pour chaque traversée vous-même, si je me souviens bien, elle s’appelait getBitmap ou quelque chose de similaire, regardez dans les classes d'imagerie / bitmap & amp; lisez quelques tutes, c’est vraiment tout ce dont vous avez besoin & amp; ne sont pas difficiles à utiliser, n'allez pas en faire partie à moins que vous n'ayez à le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top