¿Cómo puedo detectar fotos mejoradas?


8

Tengo una colección de fotos JPEG, cada una de 500 a 600 píxeles en el lado más largo. ¿Cómo puedo detectar cuáles se han ampliado algorítmicamente a partir de una foto sustancialmente más pequeña?

Un mercado en línea requiere que cada vendedor cargue fotos de los productos que vende, y estas fotos deben tener al menos 500 píxeles de ancho o 500 píxeles de alto porque las fotos de productos con pocos detalles causan una mala experiencia para los compradores. Ya puedo decir si un vendedor está tratando de eludir este requisito agregando un borde de color sólido, como extender el fondo blanco estándar con más blanco. Pero últimamente, los vendedores han comenzado a eludir esto mejorando las fotos antiguas tomadas antes de que se publicara el requisito de 500 píxeles. ¿Cuál es una buena manera de determinar si las fotos se han ampliado con la interpolación vecina, bilineal o bicúbica más cercana?


Solo para aclarar, ¿está preguntando acerca de la detección completamente automatizada, sin ninguna evaluación por los globos oculares humanos?
junkyardsparkle

44
Para una prueba automatizada, es más probable que stackoverflow le dé una respuesta
Renan Le Caro

@Renan Incluso una prueba manual usando una secuencia de filtros GIMP podría funcionar para una verificación puntual de las imágenes de un vendedor en particular.
Damian Yerrick

1
Supongo que la pregunta que debemos hacernos es ¿por qué te importa? La respuesta hace una gran diferencia ...
James Snell

@JamesSnell Las fotos malas repelen a los compradores. Ver, por ejemplo, la guía de eBay .
Damian Yerrick

Respuestas:


9

Haga que un PERRO huela borroso en las fotos.

Si va a penalizar las fotos ampliadas digitalmente, también podría penalizar las fotos desenfocadas. Los bordes borrosos y los detalles en ambos causan la misma mala experiencia para los espectadores, independientemente de si es causada por un pequeño foco original o deficiente. Lo que desea hacer es detectar el desenfoque, que es la ausencia de altas frecuencias espaciales.

Intenta tomar la diferencia entre una imagen y una copia borrosa de sí misma. Si una imagen ya está borrosa, un desenfoque gaussiano de 1 píxel no va a cambiar la imagen tanto como si la imagen fuera nítida. Por lo tanto, habrá más diferencia entre una imagen nítida y una versión borrosa que entre una imagen borrosa y otra versión borrosa. En la visión por computadora, esta técnica se llama la " diferencia de los gaussianos " (DOG).

  1. Abra la imagen en GIMP u otro editor de fotos en capas.
  2. Duplicar la capa.
  3. Aplique un desenfoque gaussiano con un radio de 1 píxel a esta nueva capa.
  4. Cambia el modo de capa a "Diferencia". La imagen se volverá negra excepto por los bordes.
  5. Repita los pasos 1-4 para obtener una imagen nítida conocida de un tema, composición y tamaño similares.
  6. Compare la intensidad de los bordes en las dos imágenes de diferencia. Puedes mirar esto o usar un histograma.

Acabo de probar esto en una foto de 400x480 píxeles y en la misma cosa que se redujo a 200x240 (50%) y luego se amplió de nuevo a 400x480 (200%), y los bordes de la foto mejorada fueron notablemente más débiles. No será concluyente en un aumento leve como 140%, pero captará casos evidentes.

Varias bibliotecas de visión por computadora incluyen medios para calcular la diferencia de gaussianos en una imagen. Lo mismo hacen muchos editores de imágenes gráficas. Versiones recientes de GIMP, por ejemplo. incluya una macro DOG que automatice los pasos 2 a 4: Filtros> Detección de bordes> Diferencia de gaussianos, luego configure los radios en 1.0 y 0.0.

Preguntas relacionadas en otros sitios de Stack Exchange:

El PERRO no atrapará al vecino más cercano, pero puede hacerlo buscando un patrón de filas y columnas que sean idénticas a su vecino inmediato hacia la parte superior o izquierda.

  1. Abre la imagen.
  2. Duplicar la capa.
  3. Desplace la nueva capa un píxel hacia arriba o hacia la izquierda.
  4. Cambia el modo de capa a "Diferencia".
  5. Busque un patrón de líneas en blanco.

1
¿Qué pasa si la imagen mejorada tiene una máscara de desenfoque realmente fuerte aplicada?
Lea mi perfil

1
La máscara de desenfoque @mattdm aumenta el contraste, no crea contenido de imagen de alta frecuencia.
Matt Grum

@mattdm USM es un filtro de alto impulso: x + amt*(x - GB(x, r)). La combinación de USM y ampliación solo aumentará los medios (frecuencias espaciales medias), no los máximos, porque los máximos no existen. PERRO (x, 1, 0) aísla los máximos.
Damian Yerrick

1

No creo que esto sea posible en el sentido general. Existen muchos algoritmos de escalamiento posibles, con una firma que puede ser difícil de detectar sin ambigüedades sin el conocimiento del contenido de la imagen (como un ejemplo extremo, un área escalada de color uniforme sigue siendo color uniforme ...).

Posiblemente, una opción sería calcular una métrica para la complejidad de la imagen, como una estimación de entropía (por ejemplo, consulte /programming/4935380/get-or-calculate-the-entropy-of-an-image-with -ruby-and-imagemagick ).

Si hace esto en una gran cantidad de imágenes, puede generar estadísticas para toda la colección. Luego, puede revisar manualmente las imágenes que son atípicas en esas estadísticas.

Desafortunadamente, esto siempre dará como resultado falsos positivos y las imágenes que han sido escaladas bien pueden no ser captadas (pero si son buenas, ¿importa?)


Me gusta la última parte: si nadie puede decir, ¿a quién le importa? Me recuerda a este Xkcd . (Advertencia: lenguaje fuerte.)
Lea mi perfil

0

Tomaría un enfoque híbrido. Creo que las otras ideas de usar una diferencia de gaussianos, verificar EXIF ​​u otros metadatos, o incluso FFT se pueden combinar. Otra forma posiblemente más fácil es simplemente tomar cada imagen, reducirla, aumentarla nuevamente y comparar. Si son muy similares (usando algo como Delta E , tal vez), entonces es probable que hayan sido mejorados (o borrosos como sugiere otra publicación). ¿Quizás podría establecer un umbral de la cantidad de pruebas aprobadas vs. reprobadas? Si pasan más de la mitad de las pruebas, entonces es bueno, de lo contrario, es malo, o necesita intervención humana para verificar, o algo así.


0

Debería poder hacer un trabajo lo suficientemente bueno desempacando parcialmente los datos JPEG y haciendo un recuento trivial.

Los datos JPEG se crean realizando una transformada discreta del coseno en los datos de la imagen original, cuantificando (desechando los datos de alta resolución), luego caminando a través del bloque DCT resultante en un patrón en zigzag y empacando el flujo de bits resultante con la codificación Huffman.

Si invierte la codificación Huffman y deshace el zigzag, tendrá una serie de bloques DCT de 8x8, en los que los datos de frecuencia más baja se encuentran en la esquina superior izquierda del bloque y la información de frecuencia más alta se encuentra en la esquina inferior derecha.

Lo que eso significa es que, literalmente, puedes echar un vistazo a los datos en ese formato intermedio y saber si se muestreó, ya que todos los bloques de 8x8 tendrán valores distintos de cero solo en la esquina superior izquierda (aproximadamente).


0

En realidad puedes

No necesitas un perro para oler la imagen. Ir:

http://rest7.com/image_upscaled

En esta página puede cargar su imagen y obtendrá dimensiones originales , como esta:

{
  "is_upscaled": true,
  "current_width": "2000",
  "current_height": "928",
  "original_width": "1750",
  "original_height": "696",
  "accuracy": "82%",
  "accuracy_width": "82%",
  "accuracy_height": "82%",
  "success": 1
}

A veces no adivina la resolución original correctamente. Creo que depende del algoritmo de aumento de escala utilizado en la foto. También descubrí que si una foto se escalaba y luego se comprimía a un formato JPEG con una gran compresión (como 30%), los artefactos JPEG hacen que sea más difícil adivinar esta página. Pero si sus fotos son de buena calidad, mejoradas utilizando métodos populares (Lanczos, Bilinear), deberían ser bastante precisas.

Aquí hay 2 imágenes de muestra:

ORIGINAL

https: // i. apilar. imgur com / iXYKV.png

(lo siento, no tengo suficiente reputación para publicar más de 2 enlaces)

UPSCALED Y CROPPED

ingrese la descripción de la imagen aquí

Si publica la foto recortada, esta página le devolverá:

{
  "is_upscaled": true,
  "current_width": "700",
  "current_height": "300",
  "original_width": 352.33333333333,
  "original_height": 151,
  "accuracy": "57%",
  "accuracy_width": "57%",
  "accuracy_height": "57%",
  "cropped": true,
  "success": 1
}

Para que pueda ver que detectó que la imagen se amplió y recortó. No le indicará el tamaño de la imagen original antes de recortar, ya que no es posible obtener información sobre algo que se eliminó solo de los píxeles que quedan intactos.


Ese sitio solo funcionará mientras pueda confiar en los datos incrustados en la imagen. Pero es trivialmente fácil modificar tales datos. Y si estuviera tratando de engañar a un mercado por dinero, estaría alterando los datos de la izquierda a la derecha y al centro.
Peter M

@PeterM No estoy muy seguro de lo que quieres decir. ¿Quieres recortar una imagen? Este sitio aún detectará que fue mejorado.
Jack

Pregúntese cómo sabe que se recortó la imagen. ¿Dónde cree que se almacena la información que le dice cuál era el tamaño original de la imagen?
Peter M

@PeterM Bueno, no estoy seguro de cómo funciona exactamente , pero lo usé un poco y puedo decirle que analiza los píxeles y detecta la resolución original en función de eso. No analiza el formato del archivo sino los píxeles en sí. Entonces la resolución original no se almacena en ningún lado.
Jack

@Jack Cuando "analiza los píxeles", probablemente usa algo como DOG.
Damian Yerrick
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.