2010-03-10 1 views
5

Esistono algoritmi disponibili per analizzare la complessità di un'immagine? Fondamentalmente sto scrivendo uno script Perl che userà la funzione system() per avviare MPlayer in background per generare da 10 a 20 screenshot per il file video di input e mi piacerebbe che fosse in grado di scartare qualsiasi immagine semplice come colpo del cielo, o uno sfondo nero, e altre immagini semplici e mantenere solo 3 di quelle immagini con la massima complessità o maggior numero di colori. Esiste un modulo o un programma separato che posso utilizzare per realizzare questo? Immagino che forse Image :: Magick possa occuparsene.Analisi della complessità dell'immagine

+4

Stai chiedendo un algoritmo molto più complesso di quello che pensi ... – RedFilter

risposta

9

Vedi quanto piccolo una copia JPEG compresso è. JPEG lavora duramente per rimuovere le ridondanze nelle informazioni sulle immagini e le immagini "complesse" semplicemente non hanno la stessa ridondanza da rimuovere.

+1

Questa è una buona idea: confrontare la dimensione bitmap di un'immagine con la dimensione del file jpeg, maggiore è la differenza tra i due, più semplice è l'immagine. – Kazar

+0

Questo potrebbe funzionare per le immagini fotografiche, ma ho la sensazione che non farebbe così bene su disegni, testi o altre cose che jpeg non gestisce bene. Tuttavia, per quel tipo di immagini, è possibile utilizzare la stessa tecnica con un png o una gif. – Seth

+0

Questo FUNZIONA sorprendentemente bene, l'ho usato per scegliere la miniatura migliore da una serie di miniature prima ed è fantastico per sbarazzarsi di quelli solo neri –

0

Si potrebbe considerare di fare un FFT e cercare le informazioni ad alta frequenza nelle immagini ... Ciò darebbe un'idea approssimativa della complessità.

0

Non so di un metodo biblioteca ready-made, ma ci sono alcuni algoritmi per misurare questo ...

Si potrebbe provare a sommare i valori assoluti delle differenze di un pixel al successivo , separatamente per canale colore. L'immagine campione con il risultato più alto avrebbe vinto, quindi. Eppure, sarebbe una misura approssimativa molto ...

po 'di pseudo-codice, dal momento che non so perl:

complexity = 0 
// image coordinates start at [0,0] 
for x = 1 to image.max_x: 
    for y = 1 to image.max_y: 
     complexity += abs(image[x,y].red - image[x,y-1].red) 
     complexity += abs(image[x,y].red - image[x-1,y].red) 
     complexity += abs(image[x,y].blue - image[x,y-1].blue) 
     complexity += abs(image[x,y].blue - image[x-1,y].blue) 
     complexity += abs(image[x,y].green - image[x,y-1].green) 
     complexity += abs(image[x,y].green - image[x-1,y].green) 
+0

Questo preferirà immagini "rumorose" a immagini "densi di informazioni". Considera una cornice di rumore bianco/neve. –

+0

Ok, giusto. Ma nei casi tipici, anche questo funzionerebbe. L'unico film dal quale ricordo le immagini rumorose sarebbe "The Ring" - e quella cornice sarebbe un'anteprima piuttosto tipica per il film, penso ;-) A proposito, potresti anche misurare ciò che questo algo avrebbe vomitato per un'immagine di rumore bianca e non consentire nulla sopra una soglia un po 'al di sotto di quella misura. E, per essere onesti, questo algo produrrebbe solo informazioni preziose su immagini che hanno le stesse dimensioni. OTOH, nell'applicazione menzionata dall'OP, sarebbe intrinsecamente il caso. – orithena

1

La mia prima risposta sarebbe il metodo JPEG ma qualcuno lo ha già suggerito, quindi la mia risposta successiva sarebbe calcolare un istogramma ($image->Histogram()). Basta guardare il numero di colori diversi nell'immagine. Per le foto (cose come il cielo), più colori in un'immagine, più è complesso.

+0

Non sono d'accordo. Le immagini monocromatiche/bilevel possono essere molto densi di informazioni http://obeygiant.com/images/2008/10/obey-floral-red-500x490.jpg .... Tuttavia, hai detto "foto". –

+0

Joe: Ecco perché l'ho qualificato con "Per foto". Il suo esempio era "sfondo nero" o "cielo", entrambi implicano foto a colori. Infatti, ha persino chiesto come contare i colori, che è la risposta che ho dato. – Gabe

+0

Bene, quell'immagine è una foto di un disegno! Ma sì, capisco il tuo punto e sono d'accordo sul fatto che tu abbia fornito la soluzione alla domanda. –

2

Ottima carta here sull'argomento. Considera il problema più stretto di corrispondenza delle immagini in un'applicazione militare, ma esamina la ricerca e contiene numerose metriche di complessità dell'immagine che sono state considerate da vari autori. È possibile che tu possa aver bisogno solo di uno o due dei metodi nella tua particolare attività. Controlla.