Pregunta

Esta es una pregunta bastante amplia; ¿Qué herramientas / bibliotecas existen para tomar dos fotografías que no son idénticas, pero extremadamente similares, e identificar las diferencias específicas entre ellas?

Un ejemplo sería tomar una foto de mi sofá el viernes después de que mi novia termine de limpiar y antes de un largo fin de semana de tener amigos, beber y tocar la banda de rock. Dos días después tomé una segunda foto del sofá; la iluminación es idéntica, el sofá no se ha movido un milímetro, y uso un trípode en una ubicación fija.

¿Qué herramientas podría usar para generar una diferencia de las imágenes o una tercera imagen de mapa de calor de las diferencias? ¿Hay alguna herramienta para .NET?

¿Fue útil?

Solución

Consulte el artículo de Andrew Kirillov en CodeProject. Escribió una aplicación C # usando la AForge.NET biblioteca de visión por computadora para detectar movimiento. En el sitio web de AForge.NET, hay un discusión de dos diferencias de marco para la detección de movimiento.

Otros consejos

Esto depende en gran medida del formato y la compresión de la imagen. Pero, al final del día, probablemente esté tomando dos rásteres y comparándolos píxel por píxel.

Eche un vistazo a la Utilidad de diferencia de imagen perceptual .

La forma más obvia de ver cada pequeña diferencia, normalmente casi imperceptible, sería XOR los datos de píxeles. Sin embargo, si la iluminación es incluso ligeramente diferente, podría ser demasiado. Diferenciar (restar) los datos de píxeles puede ser más lo que está buscando, dependiendo de cuán sutiles sean las diferencias.

Un lugar para comenzar es con una rica biblioteca de procesamiento de imágenes como IM . Puede incursionar con sus operadores interactivamente con la herramienta IMlab , llamarlo directamente desde C o C ++, o usar su Lua vinculante realmente decente para conducirlo desde Lua. Admite una amplia gama de operaciones en mapas de bits, así como una biblioteca extensible de formatos de archivo.

Incluso si no ha movido nada deliberadamente, es posible que desee utilizar un algoritmo como SIFT para obtener una buena alineación de calidad de subpíxeles entre los cuadros. A menos que quiera tratar la cámara como fija y detectar el movimiento del sofá también.

Escribí esta aplicación .NET gratuita utilizando el kit de herramientas que hace mi empresa (DotImage). Tiene un algoritmo muy simple, pero el código es de código abierto si quieres jugar con él; puedes adaptar el algoritmo a las clases de imagen .NET si no quieres comprar una copia de DotImage.

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

Es una pregunta interesante. No puedo remitirlo a ninguna biblioteca específica, pero el proceso que está preguntando es básicamente un caso mínimo de compensación de movimiento. Esta es la forma en que el video MPEG (MP4, DIVX, lo que sea) logra comprimir el video tan bien; puede buscar en MPEG alguna información sobre la forma en que se implementan esos algoritmos de compensación de movimiento.

Otra cosa a tener en cuenta; La compresión JPEG es una compresión basada en bloques; Gran parte del beneficio que MPEG aporta de las cosas es hacer una comparación de bloques. Si la mayor parte de su imagen (por ejemplo, el fondo) es la misma de una imagen a la siguiente, esos bloques no se modificarán. Es una forma rápida de reducir la cantidad de datos necesarios para ser comparados.

simplemente use las clases de imágenes de .net, cree un nuevo mapa de bits () x 2 y observe el R & amp; G & amp; Valores B de cada píxel, también puede mirar los valores A (Alfa / transparencia) si quiere determinar la diferencia.

también una nota, usar el método getPixel (y, x) puede ser muy lento, hay otra forma de obtener la imagen completa (menos elegante) y para cada uno de ellos, si recuerdo que se llamaba getBitmap o algo similar, mira en las clases de imagen / mapa de bits & amp; lee algunos tutes, realmente son todo lo que necesitas & amp; no es tan difícil de usar, no vaya a un tercero a menos que tenga que hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top