Domanda

Questa è una domanda abbastanza ampia; quali strumenti / librerie esistono per scattare due fotografie non identiche, ma estremamente simili, e identificare le differenze specifiche tra loro?

Un esempio potrebbe essere quello di scattare una foto del mio divano venerdì dopo che la mia ragazza ha finito di fare le pulizie e prima di un lungo weekend di amici, bevendo e suonando rock band. Due giorni dopo faccio una seconda foto del divano; l'illuminazione è identica, il divano non si è mosso di un millimetro e uso un treppiede in una posizione fissa.

Quali strumenti potrei usare per generare una diff delle immagini o una terza immagine della mappa di calore delle differenze? Esistono strumenti per .NET?

È stato utile?

Soluzione

Consulta articolo di Andrew Kirillov su CodeProject. Ha scritto un'applicazione C # utilizzando la AForge.NET libreria per la visione artificiale per rilevare il movimento. Sul sito Web di AForge.NET, c'è una discussione di due differenze di frame per il rilevamento del movimento.

Altri suggerimenti

Questo dipende in gran parte dal formato dell'immagine e dalla compressione. Ma, alla fine, probabilmente stai prendendo due raster e confrontandoli pixel per pixel.

Dai un'occhiata alla Utilità per la percezione delle immagini percettive .

Il modo più ovvio per vedere ogni piccola differenza, normalmente quasi impercettibile, sarebbe XOR i dati pixel. Se l'illuminazione è anche leggermente diversa, potrebbe essere troppo. La differenza (sottrazione) dei dati pixel potrebbe essere più ciò che stai cercando, a seconda di quanto siano sottili le differenze.

Un punto di partenza è una ricca libreria di elaborazione delle immagini come IM . Puoi dilettarti con i suoi operatori in modo interattivo con lo strumento IMlab , chiamarlo direttamente da C o C ++ o usare il suo associazione Lua davvero decente per scacciarla da Lua. Supporta una vasta gamma di operazioni su bitmap, nonché una libreria estensibile di formati di file.

Anche se non hai spostato deliberatamente nulla, potresti voler utilizzare un algoritmo come SIFT per ottenere un buon allineamento della qualità sub-pixel tra i frame. A meno che non si desideri trattare la videocamera come fissa e rilevare anche il movimento del divano.

Ho scritto questa applicazione .NET gratuita usando il toolkit creato dalla mia azienda (DotImage). Ha un algoritmo molto semplice, ma il codice è open source se vuoi giocarci - potresti adattare l'algoritmo alle classi di immagini .NET se non vuoi acquistare una copia di DotImage.

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

È una domanda interessante. Non posso riferirti a nessuna libreria specifica, ma il processo di cui stai chiedendo è fondamentalmente un caso minimo di compensazione del movimento. Questo è il modo in cui i video MPEG (MP4, DIVX, qualunque) riescono a comprimere i video in modo estremamente efficace; potresti consultare MPEG per alcune informazioni sul modo in cui sono implementati quegli algoritmi di compensazione del movimento.

Un'altra cosa da tenere a mente; La compressione JPEG è una compressione basata su blocchi; gran parte del vantaggio che MPEG porta dalle cose è effettivamente fare un confronto a blocchi. Se la maggior parte dell'immagine (ad esempio lo sfondo) è la stessa da un'immagine all'altra, quei blocchi rimarranno invariati. È un modo rapido per ridurre la quantità di dati da confrontare.

usa solo le classi di imaging .net, crea una nuova bitmap () x 2 e guarda R & amp; G & amp; Valori B di ciascun pixel, puoi anche guardare i valori A (alfa / trasparenza) se vuoi quando determini la differenza.

anche una nota, usando il metodo getPixel (y, x) può essere molto lento, c'è un altro modo per ottenere l'intera immagine (meno elegante) e per ogni ing tramite te stesso se ricordo che è stato chiamato getBitmap o qualcosa di simile, guarda nelle classi di imaging / bitmap e amp; leggi alcuni tutorial sono davvero tutto ciò di cui hai bisogno & amp; non sono così difficili da usare, non andare da terzi a meno che non sia necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top