Quel est le modèle le moins compressé en JPG? (Un chiffon avec une caméra, l'échelle / l'angle / l'éclairage peut varier)

46

J'essaie de concevoir un tissu qui, du point de vue d'une caméra, est très difficile à compresser avec JPG, ce qui produit des fichiers de grande taille (ou une qualité d'image médiocre si la taille du fichier est fixe).

Cela doit fonctionner même si le tissu est éloigné de l'appareil photo ou tourné (disons que l'échelle peut varier de 1x à 10x).

Le bruit est assez bon (difficile à compresser), mais il devient gris lorsqu'on regarde de loin et devient facile à compresser. Un bon motif serait une sorte de fractale , ressemblant à toutes les échelles.
Le feuillage est meilleur (feuilles, petites branches, petites branches, grandes branches), mais il utilise trop peu de couleurs.

Voici un premier essai: Plus incompressible

Je suis sûr qu'il y a plus de modèles optimaux.
Peut-être que les mosaïques hexagonales ou triangulaires donneraient de meilleurs résultats.

JPG utilise l’ espace colorimétrique Y ′ Cb Cr . Je pense que Cb Cr peut être généré de la même manière, mais j’imagine qu’il est préférable de ne pas utiliser uniformément toute la portée de Y '(luminosité) car la caméra saturera les zones claires ou sombres ( l'éclairage n'est jamais parfait).

QUESTION: Quel est le modèle de tissu optimal pour ce problème?

Nicolas Raoul
la source
1
Je vais devoir garder un œil sur cette question… si une réponse intéressante est obtenue, je peux prédire une commande de tissu sur www.spoonflower.com (ou un service similaire) et une chemise très difficile à regarder à ajouter. à ma collection ;-)
RBerteig
Un projet de compétition de motifs intéressant pourrait être: 1) prendre une image haute définition d'un tel motif 2) la faire pivoter, en prendre une partie aléatoire (à une échelle aléatoire), brouiller un peu, ajouter un peu de bruit et une petite couleur aléatoire écart 3) Compressez-le avec JPG 4) Consultez la taille du fichier, calculez des métriques sur la perte de qualité et calculez le "score" à l'aide de ces métriques. 5) Répéter plusieurs fois pour converger vers le score moyen de ce schéma. 6) Répéter avec d'autres schémas et comparer les scores
Nicolas Raoul
1
Étant donné que les algorithmes avec perte peuvent toujours compresser davantage en jetant plus de données, il semble que vous auriez plus de chance avec l'utilisation de modèles qui dépendent des détails haute fréquence. Par exemple, les lignes fines. En d’autres termes, la compression est bonne, mais la qualité se dégrade très rapidement. Cela dépend de ce que vous voulez accomplir, je suppose. Pensez aux empreintes digitales - il s'agit d'un cas classique dans lequel des ondelettes étaient nécessaires pour une bonne compression au format JPEG en raison de la nécessité de préserver les détails.
datageist
@datageist: Une image (sortie de caméra brute) d'un tissu avec des lignes peut être difficile à compresser, mais reculez, prenez une autre image: elle ne contiendra que des pixels gris, très facile à compresser presque sans perte. Le motif que je recherche doit donner des images (sortie de caméra brute) difficiles à compresser à une large gamme d’échelles.
Nicolas Raoul
@NicolasRaoul D'accord, je comprends, tout ce que je peux dire est compressible si vous jetez suffisamment d'informations. Voulez-vous simplement un motif qui a la particularité d'être "difficile à compresser" (par exemple, pour le plaisir), ou essayez-vous de décourager activement les personnes d'essayer de compresser les images contenant le motif?
datageist

Réponses:

15

Le bruit est assez bon (difficile à compresser), mais il devient gris lorsqu'on regarde de loin et devient facile à compresser. Un bon motif serait une sorte de fractale, ressemblant à toutes les échelles.

Eh bien, il y a un bruit fractal . Je pense que le bruit brownien est fractal et ressemble à celui que vous zoomez dessus. Wikipedia parle d'ajouter du bruit Perlin à lui-même à différentes échelles pour produire un bruit fractal, qui est peut-être identique, je ne suis pas sûr:

Bruit fractal de Perlin

Je ne pense pas que ce serait difficile à compresser, cependant. Le bruit est difficile pour une compression sans perte, mais JPEG est une perte, alors il va simplement jeter les détails au lieu de lutter. Je ne sais pas s'il est possible de créer quelque chose de "difficile à compresser pour JPEG", car il ignorera tout ce qui est trop difficile à compresser à ce niveau de qualité.

Quelque chose avec des bords durs à n'importe quelle échelle serait probablement mieux, comme l'avion en damier infini:

avion en damier infini

Aussi quelque chose avec beaucoup de couleurs. Peut-être regarder les fractales réelles au lieu du bruit fractal. Peut-être une fractale de Mondrian ? :)

Fractal de Mondrian

endolithe
la source
1
Merci beaucoup! Le bruit fractal est sans aucun doute le type de matériel que je recherchais, mais lors de mes tests, il est bien compressé. Je suppose qu’il pourrait utiliser une transition plus abrupte, au lieu d’une douceur semblable à une carte thermique. Le problème du tableau de contrôle est que les performances dépendent vraiment de la partie de la toile photographiée. La fractale Mondrian est excellente et la plus performante de mes tests jusqu'à présent. Peut-être pourrait-il utiliser plus de couleurs et des paramètres légèrement différents.
Nicolas Raoul
@NicolasRaoul: Hmm .. Peut-être un tapis Sierpinski avec des couleurs ? C'est déjà un motif de quilting courant .
endolith
Une tessellation de triangles ou de carrés de Sierpinski pourrait bien convenir!
Nicolas Raoul
14

Si nous parlions d'images générées par ordinateur, le bruit serait la bonne approche. Mais ici, il y a l'étape de capture de la caméra.

Le bit fractal est très important en raison de la question de l'invariance d'échelle. Il n'est pas nécessaire que ce soit vraiment une fractale, si vous considérez qu'il y a une distance limitée à laquelle la personne va être photographiée. Je veux dire, si la personne qui porte le tissu est à l'arrière-plan d'une photo, cela n'aura pas beaucoup d'impact de toute façon ...

Je pense que la meilleure façon de tromper le codeur JPEG serait d’avoir des blocs avec des coefficients haute fréquence très élevés qui survivront à la quantification = beaucoup de détails et des arêtes vives; il faut donc écrire explicitement toute la séquence de coefficients (au lieu d’un EOB au 15ème coefficient environ). Les motifs en damier sont un bon moyen d'y parvenir. Le seul inconvénient que je vois, c’est que la faible résolution de l’objectif + les filtres antialiasing de la caméra ont de bonnes chances de brouiller ça! Tout devrait arriver dans les blocs 8x8 (ou 16x16 en chroma) car JPEG ne fait pas grand chose à l'échelle macro. Vous devez rendre vos blocs 8x8 aussi désordonnés que possible, même si l'objectif est flou.

Voici une suggestion:

modèle invariant en échelle, difficile à compresser en JPEG

Vous vous demandez peut-être ce que les blocs moins contrastés font ici, mais ils aident à garder la zone contrastée lorsque la chose est zoomée. Le défi ici est d’avoir quelque chose avec un motif contrasté quelle que soit l’échelle de visualisation.

Je n'ai pas formellement évalué cela. Le meilleur moyen serait d'avoir un script qui prenne l'image, applique une douzaine de recadrage / redimensionnement / flou avec divers paramètres et scinde la taille totale des fichiers JPEG.

pichenettes
la source
Merci beaucoup! Cela ressemble assez à mon concept de l'image dans la question, en fait, mais beaucoup plus agréable. Une raison spécifique pour laquelle la "fractalité" est par facteur 4? Est-ce mieux que le facteur 2?
Nicolas Raoul
aucune raison, j'ai juste essayé de le rendre plus joli avec plus de nuances de couleurs, alors j'ai commencé avec un carré 4x4.
Pichenettes
Une raison de choisir des carrés au lieu de triangles? J'essaie en ce moment, les triangles font beaucoup d'arêtes vives, ce qui me semble être une bonne idée. Une faible "fractalité" pourrait être atteinte avec une approche hybride triangle → losange → hexagon → triangle. Je pense qu'un faible facteur est une bonne chose car il augmente la probabilité pour la caméra de détecter des formes nettes jusqu’à sa limite de résolution.
Nicolas Raoul
Les carrés étaient la chose la plus facile à coder. Je ne suis pas sûr que d'autres formes aient une meilleure "densité d'arêtes" que les carrés.
Pichenettes
11

Il y a une différence entre JPEG exploitable et Transform Compressible.

Prenez le bruit granuleux blanc du téléviseur, par exemple.

Un bruit blanc général s'étale au maximum sur la fréquence et il n'y a donc pas de meilleur exemple que le bruit blanc qu'une technique de codage par domaine de transformation ne peut pas compresser. Si vous prenez un tel bruit et prenez DCT (ou DFT si nécessaire), nous verrons que le domaine de fréquence est également étendu et que tous les coefficients auront une importance.

Cependant, toujours personne ne vous empêche d'être agressif de la quantification. De cette façon, vous pouvez toujours ignorer une quantité importante des régions à haute fréquence. Le résultat aura une grosse erreur moyenne. Cependant, perceptuellement ce serait toujours du bruit. Il pourrait être très flou cependant.

De l’autre côté, prenez maintenant des images où les bords sont nets.

Les arêtes vives se seront également étendues dans la fréquence la plus élevée (mais il se peut que cela soit juste un peu moins que dans le cas précédent). Cependant, en essayant de le compresser et en chutant de haute fréquence, il y aura maintenant plusieurs obstacles visuels. Cela entraînera un flou sur les bords, un effet de sonnerie, etc. Bien que la largeur de bande pour de telles images ne soit pas la plus grande possible, pour JPEG ou toute compression équivalente, il sera difficile de conserver de telles images de qualité égale.

Quelle que soit la compression avec perte, la complexité dépend du degré et du type de distorsion tolérés.

Dipan Mehta
la source
Disons que mon tissu est une table de pixels noirs / blancs aléatoires de 10 ^ 8x10 ^ 8. La caméra prend une photo du tissu au format 10x10pixels. Statistiquement, cette image 10x10 n'aura-t-elle pas tous les pixels d'un gris très similaire, ce qui la rend facile à compresser avec moins de distorsion (de quelque type que ce soit) par rapport à une image moins uniforme?
Nicolas Raoul
10

La composition ci-dessous montre une structure de type fractale du motif. Chaque image suivante est le résultat de la moyenne de chaque bloc de 2x2 pixels du précédent. Le caractère total du motif reste le même mais le contraste de l’image diminue progressivement. Comme cela a été dit tout à l'heure, l'image devient grise lorsque nous effectuons un zoom arrière.

Comportement d'échelle

Mais en utilisant la propriété fractale, nous pourrions superposer ensemble plusieurs motifs de résolution différente afin de maintenir le contraste de l'image stable dans la plage souhaitée. L'exemple ci-dessous illustre un motif à 4 couches (512x512 GIF). Ce résultat est plus proche du bruit brownien et aussi difficilement compressible en JPEG.

Combinaison de 4 couches

MeV_2015
la source
5

Mon hypothèse est que le pire modèle compressible serait le bruit blanc (avec une distribution uniforme). Il doit sembler bruyant sur différentes résolutions, de sorte que vous puissiez créer les images bruitées dans un espace d'échelle et les assembler:

I=inNiGi

INiiGiiσ

Une meilleure façon de construire une telle image serait peut-être de travailler directement dans le domaine fréquentiel, ainsi:

  1. Créez une image remplie de bruit blanc.
  2. Effectuer une transformation IDCT de bloc 8x8 (transformation discrète en cosinus inverse) sur l'image.

Le résultat serait le modèle compressible le plus compressé pour JPEG, car il présente la plus grande entropie dans le domaine DCT. Mais je ne suis pas sûr de savoir comment cela se comportera avec différentes résolutions.

Libor
la source
5

IIRC, l'algorithme de décompression JPEG est spécifié, mais pas l'algorithme de compression exact. Différents algorithmes peuvent produire un fichier JPEG légal. Il vous faudra donc tester ceci sur le ou les compresseurs d’image choisis.

Tout peut être compressé du même montant par un compresseur avec perte, tel que JPEG. C'est simplement que, à tout niveau de compression fixe, la qualité de la compression peut varier (le bruit ou l'erreur dans le résultat décompressé augmentera) en fonction de l'image. Vous voulez donc quelque chose qui ajoute une quantité maximale de bruit au résultat décompressé. Pour cela, vous voulez l'erreur maximale pour supprimer les coefficients de macrobloc haute fréquence et pour quantifier tous les coefficients.

Ce qui signifie probablement des piquets variés et à haute fréquence, ainsi que des échelles de gris et de couleurs variables entre les niveaux de quantification possibles du compresseur donné à un réglage donné.

Puisque vous voulez que cela fonctionne à n’importe quelle distance, peu importe la luminosité, vous devrez faire varier la fréquence des piquets de grève (peut-être fractale, ou peut-être simplement avec une modulation de fréquence aléatoire), ainsi que les niveaux de couleur et de gris (de manière non cohérente, par exemple: couleurs et les niveaux indépendamment). La variance des teintes dépend moins de la distance, vous devez donc sélectionner celles-ci, ce qui sera pire pour le ou les quantificateurs sélectionnés. La taille moyenne des motifs de couleur peut être deux fois supérieure à celle des motifs de luminance pour correspondre à la composition de macrobloc YUV 4: 1: 1 (surface).

Je commencerais par une série de motifs moirés très colorés à différentes échelles superposées et / ou rapiécés de manière fractale.

hotpaw2
la source
2

Permettez-moi de partager le motif à spectre très plat (comme le bruit blanc). Il est donc très difficile de compresser ce motif avec JPG. L'image échantillon ci-dessous est agrandie 4 fois.

Le motif lui-même est régulier, mais non périodique, et pourrait être facilement généré par l’algorithme déterministe. Il a également une propriété fractale.

Schéma non périodique à spectre de bruit quasi blanc

Vu de loin: original loin

MeV_2015
la source
2

Le bruit aléatoire compresse très mal. Vous pouvez le produire en couleur en générant des valeurs R, V, B indépendantes.

Regarder à distance effacera effectivement le bruit (par filtrage passe-bas), et vous pouvez l'éviter en générant des images de bruit à différentes résolutions, c'est-à-dire en utilisant des pixels de plus en plus grands et en les superposant.

Lorsque vous ajoutez des images, vous êtes confronté au problème de la plage de valeurs, qui augmente avec le nombre d'images. Laissez N. Si vous ne faites que les moyenaliser, l'amplitude du bruit diminuera de 1 / N.

Si vous choisissez un bruit uniforme non corrélé, la superposition produira une distribution quasi-gaussienne avec un écart-type √N. Ainsi, au lieu de diviser par N, vous pouvez diviser par √N (avec un recentrage approprié) pour limiter la réduction d'amplitude.

Enfin, je suppose qu'il est préférable de laisser les valeurs enveloppantes plutôt que de les saturer, car les valeurs saturées formeront de grandes zones uniformes.

Yves Daoust
la source
2

Voici une autre approche permettant de gagner du bruit brownien RVB (4096x4096 GIF). Bruit brownien RVB

MeV_2015
la source
0

Question étonnante! En principe, le bruit blanc est un signal qui ne change pas lorsqu'il est mis à l'échelle temporelle. De la même manière, une fractale ne change pas lorsqu'elle est redimensionnée. Un processus de compression avec perte ne prend que le plus important du spectre (la durée ou la taille), mais pas tous, donc les fractales et le bruit ont une odeur de biscuit. Par conséquent, vous devez jouer avec les couleurs et les motifs de votre tissu. Ils doivent être des fractales et leur comportement doit être blanc et généré aléatoirement. Vous devriez obtenir un tissu qui semble noir (dans l’espace couleur CMJ) mais qui, dans le monde réel, présente un motif coloré.

Bonne chance! , et si vous obtenez la réponse, merci de la poster !!!.

mots rares
la source
"Vous devriez avoir un tissu qui, sur la photo, a l'air noir" <- Dans ce cas, ne serait-il pas facilement compressible?
Nicolas Raoul