¿Cuál es el patrón menos compresible JPG? (tela de disparo de cámara, escala / ángulo / iluminación puede variar)


46

Estoy tratando de diseñar una tela que, desde el punto de vista de una cámara, sea muy difícil de comprimir con JPG, lo que da como resultado archivos de gran tamaño (o una baja calidad de imagen si el tamaño del archivo es fijo).

Debe funcionar incluso si el paño está lejos de la cámara o si está girado (digamos que la escala puede variar de 1x a 10x).

El ruido es bastante bueno (difícil de comprimir), pero se vuelve gris cuando se mira desde lejos, y se vuelve fácil de comprimir. Un buen patrón sería una especie de fractal , similar en todas las escalas.
El follaje es mejor (hojas, ramas pequeñas, ramas pequeñas, ramas grandes), pero usa muy pocos colores.

Aquí hay un primer intento: Más incompresible

Estoy seguro de que hay patrones más óptimos.
Tal vez las teselaciones hexagonales o triangulares funcionarían mejor.

JPG usa el espacio de color Y ′ Cb Cr , creo que Cb Cr se puede generar de manera similar, pero supongo que es mejor no usar uniformemente el alcance completo de Y '(brillo) ya que la cámara saturará las áreas brillantes u oscuras ( la iluminación nunca es perfecta).

PREGUNTA: ¿Cuál es el patrón de tela óptimo para este problema?


1
Tendré que vigilar esta pregunta ... si se logra una respuesta interesante, puedo predecir un pedido de tela en www.spoonflower.com (o un servicio similar) y una camisa realmente difícil de ver para agregar a mi colección ;-)
RBerteig

Un proyecto interesante de competencia de patrones podría ser: 1) Tomar una imagen de alta definición de dicho patrón 2) Rotarlo, tomar una porción aleatoria (a escala aleatoria), desenfocar un poco, agregar un poco de ruido y un pequeño color aleatorio desviación 3) Comprímalo con JPG 4) Vea el tamaño del archivo, calcule las métricas sobre la pérdida de calidad y calcule el "puntaje" utilizando estas métricas. 5) Repita muchas veces para converger al puntaje promedio de este patrón 6) Repita con otros patrones y compare puntajes
Nicolas Raoul

1
Dado que los algoritmos con pérdida siempre pueden comprimir más al tirar más datos, parece que tendría más suerte con el uso de patrones que dependen de los detalles de alta frecuencia. Por ejemplo, líneas finas. En otras palabras, puede comprimirse bien, pero su calidad se degrada muy rápidamente. Depende de lo que quieras lograr, supongo. Piense en las huellas digitales: es un caso clásico en el que se necesitaban wavelets para una buena compresión sobre JPEG debido a la necesidad de preservar los detalles.
datageist

@datageist: una imagen (salida de cámara en bruto) de un paño con líneas puede ser difícil de comprimir, pero retroceda, tome otra imagen: contendrá solo píxeles grises, muy fácil de comprimir con casi ninguna pérdida. El patrón que estoy buscando debe dar lugar a imágenes (salida de cámara sin formato) que son difíciles de comprimir en una amplia gama de escalas.
Nicolas Raoul

@NicolasRaoul Bien, entiendo, solo digo que todo es compresible si arrojas suficiente información. ¿Simplemente desea un patrón que tenga la distinción de ser "difícil de comprimir" (es decir, por diversión), o está tratando de disuadir activamente a las personas de que intenten comprimir imágenes que contienen el patrón?
Datageist

Respuestas:


15

El ruido es bastante bueno (difícil de comprimir), pero se vuelve gris cuando se mira desde lejos, y se vuelve fácil de comprimir. Un buen patrón sería una especie de fractal, similar en todas las escalas.

Bueno, hay ruido fractal . Creo que el ruido browniano es fractal, con el mismo aspecto al acercarlo. Wikipedia habla sobre agregar el ruido Perlin a sí mismo a diferentes escalas para producir ruido fractal, que tal vez sea idéntico, no estoy seguro:

Ruido fractal Perlin

Sin embargo, no creo que esto sea difícil de comprimir. El ruido es difícil para una compresión sin pérdidas, pero JPEG es con pérdidas, por lo que solo va a tirar los detalles en lugar de luchar con ellos. No estoy seguro de si es posible hacer algo "difícil de comprimir JPEG", ya que simplemente ignorará cualquier cosa que sea demasiado difícil de comprimir a ese nivel de calidad.

Algo con bordes duros en cualquier escala probablemente sería mejor, como el plano infinito de tablero de ajedrez:

plano de tablero infinito

También algo con muchos colores. Quizás mire los fractales reales en lugar del ruido fractal. Tal vez un fractal Mondrian ? :)

Fractal Mondrian


1
¡Muchas gracias! El ruido fractal es definitivamente el tipo de cosas que estaba buscando, pero en mis pruebas está bien comprimido, supongo que podría usar una transición más abrupta, en lugar de una suavidad similar al mapa de calor. El problema del tablero es que el rendimiento realmente dependerá de qué parte de la tela se tome en la imagen. El fractal de Mondrian es genial, y el mejor desempeño en mis pruebas hasta ahora. Tal vez podría usar más colores y parámetros ligeramente diferentes.
Nicolas Raoul

@NicolasRaoul: Hmm .. ¿Tal vez la alfombra Sierpinski con colores ? Ese ya es un patrón de colcha común .
endolito

¡Una teselación de triángulos o cuadrados de Sierpinski podría ser realmente excelente!
Nicolas Raoul

14

Si estuviéramos hablando de imágenes generadas por computadora, el ruido sería el enfoque correcto. Pero aquí está el paso de captura de la cámara.

El bit fractal es muy importante debido al problema de la invariancia de escala. Sin embargo, no tiene que ser verdaderamente fractal, si considera que hay un rango de distancia limitado en el que la persona va a ser fotografiada. Quiero decir, si la persona que usa la tela está en el fondo de una imagen, de todos modos no tendrá mucho impacto ...

Creo que la mejor manera de engañar al codificador JPEG sería tener bloques con coeficientes de alta frecuencia muy altos que sobrevivan a la cuantización = muchos detalles y bordes afilados; entonces la secuencia completa del coeficiente tiene que escribirse explícitamente (en lugar de una EOB en el coeficiente 15 más o menos). El patrón de tablero de ajedrez es una buena manera de lograrlo. ¡El único inconveniente que veo es que la baja resolución de la lente + los filtros antialiasing de la cámara tienen una buena probabilidad de difuminar eso! Todo debería suceder dentro de 8x8 bloques (o 16x16 bloques cromados) porque JPEG no hace mucho en la escala macro. Tienes que hacer que tus bloques de 8x8 sean lo más desordenados posible, sin importar cuán borrosa sea la lente.

Aquí hay una sugerencia:

invariante a escala, patrón de compresión difícil de JPEG

Quizás se pregunte qué están haciendo los bloques menos contrastados aquí, pero ayudan a mantener la zona contrastada cuando la cosa se aleja. El desafío aquí es tener algo con un patrón contrastado sin importar la escala de visualización.

No lo he evaluado formalmente. La mejor manera sería tener una secuencia de comandos que tome la imagen, aplique una docena de recorte / cambio de tamaño / desenfoque con varios parámetros y escupe el tamaño total de los archivos JPEG.


¡Muchas gracias! Se ve bastante similar a mi el concepto de la imagen en la pregunta, en realidad, pero mucho más agradable. ¿Alguna razón específica por la cual la "fractalidad" es por el factor 4? ¿Es mejor que el factor 2?
Nicolas Raoul

No hay razón, solo he tratado de hacer que se vea más bonita con más tonos de color, así que comencé con un cuadrado 4x4.
pichenettes

¿Alguna razón para elegir cuadrados en lugar de triángulos? Estoy intentando en este momento, los triángulos hacen muchos bordes afilados, lo que creo que es una buena idea. Se podría alcanzar una baja "fractalidad" con un enfoque de triángulo híbrido → rombo → hexágono → triángulo. Creo que un factor bajo es bueno, ya que aumenta la probabilidad de que la cámara detecte formas nítidas hasta su límite de resolución.
Nicolas Raoul

Cuadrados era lo más fácil de codificar. No estoy seguro de si otras formas tienen una mejor "densidad de borde" que los cuadrados.
pichenettes

11

Hay una diferencia entre JPEG explotable y Transformable compresible.

Tome el ruido blanco granulado del televisor por ejemplo.

Un ruido blanco general se propaga al máximo en la frecuencia y, por lo tanto, no hay mejor ejemplo que el ruido blanco que ninguna técnica de codificación de dominio de transformación pueda comprimir. Si toma ese ruido y toma DCT (o DFT si es necesario), descubriremos que el dominio de frecuencia también está muy extendido y que todos los coeficientes tendrán importancia.

Sin embargo, nadie te impide ser agresivo con la cuantización. De esta manera, aún puede descartar grandes cantidades de las regiones de alta frecuencia. El resultado tendrá un gran error cuadrático medio. Sin embargo, perceptualmente aún sería ruido. Sin embargo, podría estar muy borroso.

Por otro lado, ahora tome imágenes donde haya bordes afilados.

Los bordes afilados también se han extendido en la frecuencia más alta (pero puede ser que sea un poco menos que en el caso anterior). Sin embargo, al tratar de comprimirlo y dejarlo caer de alta frecuencia, ahora habrá impedimentos visuales severos. Introducirá el desenfoque de los bordes, el efecto de timbre, etc. Si bien el ancho de banda extendido para tales imágenes no es el más alto posible, para JPEG o cualquier compresión equivalente, mantener esas imágenes perceptivamente de igual calidad será difícil.

Para cualquier compresión con pérdida, la resistencia dura y simple depende de cuánto y qué tipo de distorsión se tolera.


Digamos que mi tejido es una tabla de 10 ^ 8x10 ^ 8 de píxeles aleatorios en blanco y negro. La cámara toma una imagen de 10x10 píxeles de la tela. Estadísticamente, ¿esta imagen de 10x10 no tendrá todos los píxeles de un gris muy similar, por lo que será fácil de comprimir con menos distorsión (de cualquier tipo) que una imagen menos uniforme?
Nicolas Raoul

10

La siguiente composición muestra una estructura de tipo fractal del patrón. La siguiente imagen es el resultado de promediar cada bloque de 2x2 píxeles de la anterior. El carácter total del patrón sigue siendo el mismo, pero el contraste de la imagen está disminuyendo gradualmente. Como se dijo anteriormente, la imagen se vuelve gris cuando alejamos.

Comportamiento de escala

Pero usando la propiedad fractal, podríamos superponer varios patrones de diferente resolución para mantener el contraste de la imagen estable dentro del rango deseado. A continuación se muestra el ejemplo del patrón de 4 capas (512x512 GIF). Este resultado está más cerca del ruido browniano y apenas es comprimible JPEG.

Combinación de 4 capas


5

Mi conjetura es que el peor patrón compresible sería el ruido blanco (con distribución uniforme). Debe parecer ruidoso en diferentes resoluciones, por lo que puede crear las imágenes ruidosas en el espacio de escala y luego juntarlas:

I=inNiGi

Aquí la imagen final de la tela, es la imagen llena de ruido blanco (diferente para cada ) y es un núcleo gaussiano de tamaño . El denota convolución.N i i G i i σ INiiGiiσ

Quizás una mejor manera de construir dicha imagen sería trabajar directamente en el dominio de la frecuencia, por lo tanto:

  1. Crea una imagen llena de ruido blanco.
  2. Realice un IDCT de bloque de 8x8 (Transformada discreta inversa del coseno) en la imagen.

El resultado sería el peor patrón compresible para JPEG, ya que tiene la mayor entropía en el dominio DCT. Pero no estoy seguro de cómo se comportará esto en diferentes resoluciones.


5

IIRC, se especifica el algoritmo de descompresión JPEG, sin embargo, el algoritmo de compresión exacto no. Diferentes algoritmos pueden producir un archivo JPEG legal. Por lo tanto, deberá probar esto en los compresores de imagen elegidos.

Cualquier cosa puede ser comprimida en la misma cantidad por un compresor con pérdida, como JPEG. Es solo que, en cualquier nivel de compresión fijo, la calidad de la compresión puede variar (el ruido o error en el resultado descomprimido aumentará) dependiendo de la imagen. Entonces, desea algo que agregue una cantidad máxima de ruido al resultado descomprimido. Para esto, desea el error máximo para eliminar los coeficientes de macrobloque de alta frecuencia y para cuantificar cualquier coeficiente.

Lo que probablemente significa piquetes variables y de alta frecuencia, así como escalas variables de grises y colores que se encuentran entre los posibles niveles de cuantificación del compresor dado en algún entorno dado.

Dado que desea que esto funcione a cualquier distancia en cualquier iluminación, necesitará variar la frecuencia de los piquetes (tal vez fractal, o tal vez simplemente ramificado con modulación de frecuencia aleatoria) y los niveles de color y gris (de manera no coherente, por ejemplo, variar el colores y niveles independientemente). La variación de matices dependerá menos de la distancia, por lo que solo hay que elegirlos para que sean los peores casos para los cuantificadores seleccionados. El tamaño promedio de los patrones de color puede ser el doble del tamaño de los patrones de luminancia para que coincida con la composición de macrobloque YUV 4: 1: 1 (área).

Comenzaría con un montón de patrones de muaré altamente coloreados en escalas muy variadas superpuestas y / o remendadas fractales.


2

Permítanme compartir el patrón que tiene un espectro muy plano (como el ruido blanco). Entonces este patrón es muy difícil de comprimir con JPG. La imagen de muestra a continuación se amplía 4 veces.

El patrón en sí es regular, pero no periódico, y podría ser generado fácilmente por el algoritmo determinista. También tiene una propiedad fractal.

Patrón no periódico con espectro de ruido casi blanco

Visto desde lejos: original lejos


2

El ruido aleatorio de hecho se comprime muy mal. Puede producirlo en color generando valores R, G, B independientes.

Mirar desde la distancia eliminará el ruido (mediante filtrado de paso bajo), y puede evitarlo generando imágenes de ruido a diferentes resoluciones, es decir, utilizando píxeles cada vez más grandes y superponiéndolos.

Al agregar las imágenes, enfrenta el problema del rango de valores, que crece a medida que aumenta el número de imágenes, deje N. Si solo las promedia, la amplitud del ruido disminuirá como 1 / N.

Si elige ruido uniforme no correlacionado, la superposición dará como resultado una distribución cuasi-Gaussiana con desviación estándar √N, por lo que en lugar de dividir por N, puede dividir por √N (con un centrado adecuado) para limitar la reducción de amplitud.

Por último, supongo que es mejor dejar que los valores se envuelvan en lugar de saturarlos, ya que los valores saturados formarán grandes áreas uniformes.


2

Aquí hay otro enfoque que gana ruido browniano RGB (4096x4096 GIF). Ruido browniano RGB


0

Pregunta asombrosa! En concepto, el ruido blanco es una señal que no cambia cuando se ajusta el tiempo. Del mismo modo, un fractal no cambia cuando se ajusta su tamaño. Un proceso de compresión con pérdida solo toma lo más importante del espectro (tiempo o tamaño), no todos, por lo que el fractal y el ruido huelen a galletas. Por lo tanto, debes jugar con los colores y patrones de tu tela. Deben ser fractales y el comportamiento fractal debe ser blanco generado aleatoriamente. Debe obtener una tela que en la foto se vea negra (en el espacio de color CMY) pero en el mundo real, tiene un patrón colorido.

¡Buena suerte! , y si obtienes la respuesta por favor publícalo !!!.


"Deberías obtener una tela que en la foto se vea negra" <- En ese caso, ¿no sería fácilmente comprimible?
Nicolas Raoul
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.