2010-03-10 21 views
5

¿Hay algún algoritmo disponible para analizar la complejidad de una imagen? Básicamente, estoy escribiendo un script Perl que usará la función system() para iniciar MPlayer en segundo plano y generar de 10 a 20 capturas de pantalla para el archivo de video de entrada, y me gustaría que pueda descartar cualquier imagen simple como una toma del cielo, o un fondo negro, y otras imágenes simples y conserva solo 3 de esas imágenes con la mayor complejidad o la mayor cantidad de colores. ¿Hay algún módulo o programa separado que pueda usar para lograr esto? Supongo que quizás Image :: Magick puede encargarse de esto.Análisis de la complejidad de la imagen

+4

Está solicitando un algoritmo mucho más complejo de lo que cree ... – RedFilter

Respuesta

9

ver lo pequeños una copia comprimida-JPEG es. JPEG trabaja duro para eliminar redundancias en la información de la imagen e imágenes "complejas" simplemente no tienen tanta redundancia para eliminar.

+1

Esta es una buena idea: compare el tamaño del mapa de bits de una imagen con el tamaño del archivo jpeg, cuanto mayor sea la diferencia entre los dos, más simple será la imagen. – Kazar

+0

Esto podría funcionar para imágenes fotográficas, pero tengo la sensación de que no funcionaría tan bien en arte de línea, texto u otras cosas que jpeg no maneja bien. Sin embargo, para ese tipo de imágenes, puede usar la misma técnica con un png o gif. – Seth

+0

Esto FUNCIONA sorprendentemente bien, lo he usado para elegir la mejor miniatura de un conjunto de miniaturas anteriores y es genial para deshacerme de las negras. –

0

Puede considerar hacer un FFT y buscar información de alta frecuencia en las imágenes ... Eso le daría una idea aproximada de la complejidad.

0

No sé de un método de biblioteca ya hecho, pero hay algunos algoritmos para medir esto ...

Se podría tratar de sumar los valores absolutos de las diferencias de un píxel al siguiente , por separado por canal de color. La imagen de muestra con el resultado más alto ganaría, entonces. Aún así, sería una medida aproximada muy ...

poco de pseudo-código, ya no sé 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

Preferirá las imágenes "ruidosas" a las imágenes "densas en información". Considere un marco de ruido blanco/nieve. –

+0

Bien, eso es correcto. Pero en casos típicos, esto también funcionaría. La única película de la que recuerdo imágenes ruidosas sería "The Ring", y ese fotograma sería una vista previa bastante típica para la película, creo ;-) Por cierto, también podrías medir lo que este algo vomitaría para una imagen de ruido blanco y no permitir nada por encima de un umbral un poco por debajo de esa medición. Y, para ser justos, este algo solo produciría información valiosa en imágenes que tienen las mismas dimensiones. OTOH, en la aplicación que mencionó el OP, sería inherentemente el caso. – orithena

1

Mi primera respuesta sería el método JPEG pero alguien ya lo sugirió, por lo que mi siguiente respuesta sería calcular un histograma ($image->Histogram()). Solo mira la cantidad de colores diferentes en la imagen. Para fotos (cosas como el cielo), cuantos más colores haya en una imagen, más compleja será.

+0

No estoy de acuerdo. Las imágenes en blanco y negro pueden ser muy densas en información http://obeygiant.com/images/2008/10/obey-floral-red-500x490.jpg .... Sin embargo, usted dijo "fotos". –

+0

Joe: Por eso lo califiqué con "Para fotos". Su ejemplo fue "fondo negro" o "cielo", ambos implican fotos en color. De hecho, incluso me preguntó cómo contar los colores, que es la respuesta que di. – Gabe

+0

¡Bueno, esa imagen es una foto de un dibujo! Pero sí, veo tu punto y estoy de acuerdo en que proporcionaste la solución a la pregunta. –

2

Gran papel here sobre el tema. Considera el problema más estrecho de emparejar imágenes en una aplicación militar, pero estudia la investigación y contiene muchas métricas diferentes de complejidad de imagen que han sido consideradas por varios autores. Es posible que necesite solo uno o dos de los métodos en su tarea particular. Echale un vistazo.

Cuestiones relacionadas