Was ist das am wenigsten JPG-komprimierbare Muster? (Kameraaufnahme Stück Stoff, Maßstab / Winkel / Beleuchtung kann variieren)


46

Ich versuche, ein Tuch zu entwerfen, das aus der Sicht einer Kamera sehr schwer mit JPG zu komprimieren ist, was zu großen Dateien führt (oder zu einer niedrigen Bildqualität führt, wenn die Dateigröße festgelegt ist).

Es muss funktionieren, auch wenn das Tuch weit von der Kamera entfernt oder gedreht ist (sagen wir, die Skala kann von 1x bis 10x variieren).

Das Rauschen ist ziemlich gut (schwer zu komprimieren), aber es wird grau, wenn man von weitem schaut, und es wird leicht zu komprimieren. Ein gutes Muster wäre eine Art Fraktal , das auf allen Skalen ähnlich aussieht.
Laub ist besser (Blätter, kleine Zweige, kleine Zweige, große Zweige), aber es werden zu wenige Farben verwendet.

Hier ist ein erster Versuch: Am unkomprimierbarsten

Ich bin sicher, dass es optimalere Muster gibt.
Vielleicht würden Sechseck- oder Dreieck- Tessellationen eine bessere Leistung erbringen.

JPG verwendet den Y 'Cb Cr-Farbraum . Ich denke, Cb Cr kann auf ähnliche Weise erzeugt werden, aber ich denke, es ist besser, nicht den gesamten Bereich von Y' (Helligkeit) gleichmäßig zu nutzen, da die Kamera die hellen oder dunklen Bereiche sättigt ( Beleuchtung ist nie perfekt).

FRAGE: Was ist das optimale Stoffmuster für dieses Problem?


1
Ich muss ein Auge auf diese Frage haben ... Wenn eine interessante Antwort erreicht wird, kann ich eine Stoffbestellung unter www.spoonflower.com (oder einen ähnlichen Service) vorhersagen und ein wirklich schwer zu betrachtendes Hemd hinzufügen zu meiner Sammlung ;-)
RBerteig

Ein interessantes Musterwettbewerbsprojekt könnte sein: 1) Nehmen Sie ein hochauflösendes Bild eines solchen Musters auf. 2) Drehen Sie es, nehmen Sie einen zufälligen Teil davon (auf einer zufälligen Skala), verwischen Sie ein wenig, fügen Sie ein wenig Rauschen und kleine zufällige Farben hinzu Abweichung 3) Mit JPG komprimieren. 4) Dateigröße anzeigen, Messwerte für den Qualitätsverlust berechnen und mit diesen Messwerten den "Score" berechnen. 5) Mehrmals wiederholen, um zur durchschnittlichen Punktzahl dieses Musters zu gelangen. 6) Mit anderen Mustern wiederholen und Punktzahlen vergleichen
Nicolas Raoul,

1
Da verlustbehaftete Algorithmen immer mehr komprimieren können, indem Sie mehr Daten wegwerfen, haben Sie anscheinend mehr Glück mit der Verwendung von Mustern, die von den hochfrequenten Details abhängen. Zum Beispiel feine Linien. Mit anderen Worten, es kann gut komprimiert werden, die Qualität verschlechtert sich jedoch sehr schnell. Kommt darauf an, was du erreichen willst, nehme ich an. Denken Sie an Fingerabdrücke - dies ist ein klassischer Fall, bei dem Wavelets für eine gute Komprimierung über JPEG erforderlich waren, weil die Details erhalten bleiben mussten.
Datageist

@datageist: Ein Bild (rohe Kameraausgabe) eines Stoffes mit Linien ist möglicherweise schwer zu komprimieren, aber machen Sie einen Schritt zurück und ein anderes Bild: Es enthält nur graue Pixel, die sich sehr leicht und nahezu verlustfrei komprimieren lassen. Das Muster, nach dem ich suche, muss zu Bildern führen (unverarbeitete Kameraausgabe), die in einem weiten Bereich von Skalen schwer zu komprimieren sind.
Nicolas Raoul

@NicolasRaoul Richtig, ich verstehe, ich sage nur, dass alles komprimierbar ist, wenn Sie genügend Informationen wegwerfen. Möchten Sie nur ein Muster, das sich nur schwer komprimieren lässt (z. B. zum Spaß), oder möchten Sie die Leute aktiv davon abhalten, Bilder mit dem Muster zu komprimieren?
Datageist

Antworten:


15

Das Rauschen ist ziemlich gut (schwer zu komprimieren), aber es wird grau, wenn man von weitem schaut, und es wird leicht zu komprimieren. Ein gutes Muster wäre eine Art Fraktal, das auf allen Skalen ähnlich aussieht.

Nun, es gibt fraktales Rauschen . Ich denke, Brown'sches Rauschen ist fraktal und sieht genauso aus, wie Sie hineinzoomen. In Wikipedia wird über das Hinzufügen von Perlin-Rauschen zu sich selbst in verschiedenen Maßstäben gesprochen, um fraktales Rauschen zu erzeugen, das möglicherweise identisch ist. Ich bin mir nicht sicher:

Perlin fraktale Geräusche

Ich denke jedoch nicht, dass dies schwer zu komprimieren ist. Rauschen ist schwer für verlustfreie Komprimierung, aber JPEG ist verlustbehaftet. Es wird also nur das Detail wegwerfen, anstatt mit ihm zu kämpfen. Ich bin nicht sicher, ob es möglich ist, die Komprimierung von JPEG zu erschweren, da alles ignoriert wird, was bei dieser Qualitätsstufe zu schwer zu komprimieren ist.

Etwas mit harten Kanten in jedem Maßstab wäre wahrscheinlich besser, wie die unendliche Schachbrettebene:

unendlich schachbrett flugzeug

Auch etwas mit vielen Farben. Vielleicht schauen Sie sich die tatsächlichen Fraktale an, anstatt das Fraktalrauschen. Vielleicht ein Mondrian-Fraktal ? :)

Mondrian Fractal


1
Danke vielmals! Das fraktale Rauschen ist definitiv das, wonach ich gesucht habe, aber in meinen Tests ist es gut komprimiert. Ich denke, es könnte einen abrupteren Übergang anstelle einer Heatmap-ähnlichen Glätte verwenden. Das Problem des Checkboards ist, dass die Leistung wirklich davon abhängt, welcher Teil des Stoffes auf dem Bild aufgenommen wurde. Mondrian Fractal ist großartig und die beste Leistung in meinen bisherigen Tests. Vielleicht könnte es mehr Farben und etwas andere Parameter verwenden.
Nicolas Raoul

@NicolasRaoul: Hmm .. Vielleicht Sierpinski Teppich mit Farben ? Das ist schon ein gängiges Quiltmuster .
Endolith

Eine Tessellation von Sierpinski-Dreiecken oder -Quadraten könnte in der Tat großartig sein!
Nicolas Raoul

14

Wenn wir von computergenerierten Bildern sprechen würden, wäre Rauschen der richtige Ansatz. Aber hier gibt es den Kameraerfassungsschritt.

Das fraktale Bit ist aufgrund des Problems der Skaleninvarianz sehr wichtig. Es muss jedoch nicht wirklich fraktal sein, wenn Sie bedenken, dass die Entfernung, in der die Person fotografiert werden soll, begrenzt ist. Ich meine, wenn sich die Person, die das Tuch trägt, im Hintergrund eines Bildes befindet, hat es sowieso keinen großen Einfluss ...

Ich denke, der beste Weg, um den JPEG-Encoder auszutricksen, besteht darin, Blöcke mit sehr hohen Hochfrequenzkoeffizienten zu haben, die die Quantisierung überleben - viele Details und scharfe Kanten. Daher muss die gesamte Koeffizientensequenz explizit geschrieben werden (anstelle eines EOB etwa beim 15. Koeffizienten). Schachbrettmuster sind ein guter Weg, um dies zu erreichen. Der einzige Nachteil, den ich sehe, ist, dass die niedrige Auflösung des Objektivs + der Kamera-Antialiasing-Filter eine gute Chance haben, dies zu verwischen! Alles sollte innerhalb von 8x8-Blöcken (oder 16x16-Blöcken in Bezug auf die Farbsättigung) geschehen, da JPEG im Makromaßstab nicht viel bewirkt. Sie müssen Ihre 8x8-Blöcke so unordentlich wie möglich machen, egal wie unscharf die Linse sie machen wird.

Hier ist ein Vorschlag:

Skaleninvariantes, schwer zu komprimierendes JPEG-Muster

Sie mögen sich fragen, was die weniger kontrastreichen Blöcke hier tun, aber sie helfen, die kontrastreiche Zone beizubehalten, wenn das Objekt herausgezoomt wird. Die Herausforderung hierbei ist, unabhängig von der Betrachtungsskala ein kontrastreiches Muster zu haben.

Ich habe dies nicht offiziell bewertet. Der beste Weg wäre, ein Skript zu haben, das das Bild aufnimmt, ein Dutzend Zuschnitte / Größenänderungen / Unschärfen mit verschiedenen Parametern anwendet und die Gesamtgröße der JPEGs aufteilt.


Danke vielmals! Sieht meiner Vorstellung vom Bild in der Frage eigentlich recht ähnlich, ist aber viel schöner. Gibt es einen bestimmten Grund, warum die "Fraktalität" den Faktor 4 hat? Ist es besser als Faktor 2?
Nicolas Raoul

Kein Grund, ich habe nur versucht, es mit mehr Farbtönen hübscher zu machen, also habe ich mit einem 4x4-Quadrat begonnen.
Pichenettes

Gibt es einen Grund, Quadrate anstelle von Dreiecken zu wählen? Ich versuche gerade, Dreiecke machen viele scharfe Kanten, was ich für gut halte. Eine niedrige "Fraktalität" könnte mit einem hybriden Dreieck → Raute → Sechseck → Dreieck-Ansatz erreicht werden. Ich denke, ein niedriger Faktor ist eine gute Sache, da er die Wahrscheinlichkeit erhöht, dass die Kamera scharfe Formen bis zu ihrer Auflösungsgrenze erkennt.
Nicolas Raoul

Quadrate waren am einfachsten zu codieren. Ich bin nicht sicher, ob andere Formen eine bessere "Kantendichte" als Quadrate haben.
Pichenettes

11

Es gibt einen Unterschied zwischen JPEG und Transform Compressible.

Nehmen wir zum Beispiel das weiße, körnige Geräusch eines Fernsehers.

Ein allgemeines weißes Rauschen ist in der Frequenz maximal gestreut, und daher gibt es kein besseres Beispiel als weißes Rauschen, das mit irgendeiner Transformationsdomänencodiertechnik nicht komprimiert werden kann. Wenn Sie ein solches Rauschen und DCT (oder DFT, falls erforderlich) verwenden, werden wir feststellen, dass der Frequenzbereich ebenfalls weit verbreitet ist und alle Koeffizienten von Bedeutung sind.

Dennoch hindert Sie niemand daran, aggressiv gegen die Quantisierung vorzugehen. Auf diese Weise können Sie immer noch große Mengen aus den Hochfrequenzbereichen entfernen. Das Ergebnis wird einen schweren Mean-Square-Fehler haben. Wahrnehmungsmäßig wäre es jedoch immer noch Lärm. Es könnte jedoch stark verschwommen sein.

Nehmen Sie jetzt Bilder mit scharfen Kanten auf.

Scharfe Kanten haben sich auch in der höheren Frequenz ausgebreitet (es kann jedoch auch sein, dass sie geringfügig geringer sind als im vorherigen Fall). Beim Versuch, es zu komprimieren und hochfrequent abzufallen, treten jedoch jetzt erhebliche visuelle Hindernisse auf. Dies führt zu Unschärfen von Kanten, Ringen usw. Während die Bandbreite für solche Bilder nicht so groß wie möglich ist, ist es bei JPEG oder einer vergleichbaren Komprimierung schwierig, die Qualität solcher Bilder gleich zu halten.

Bei einer verlustbehafteten Komprimierung hängt die Stärke und Einfachheit davon ab, wie viel und welche Art von Verzerrung toleriert wird.


Angenommen, mein Stoff ist eine 10 ^ 8x10 ^ 8-Tabelle mit zufälligen Schwarz / Weiß-Pixeln. Die Kamera nimmt ein 10x10 Pixel großes Bild des Stoffes auf. Ist es statistisch gesehen nicht so, dass bei diesem 10x10-Bild alle Pixel ein sehr ähnliches Grau aufweisen und sich daher leicht mit weniger Verzerrungen (jeglicher Art) komprimieren lassen als bei einem weniger einheitlichen Bild?
Nicolas Raoul

10

Die folgende Zusammensetzung zeigt eine fraktale Art Struktur des Musters. Das jeweils nächste Bild ist das Ergebnis der Mittelung über jeden 2x2-Pixel-Block des vorherigen. Der Gesamtcharakter des Musters bleibt gleich, aber der Bildkontrast nimmt allmählich ab. Wie bereits gesagt, wird das Bild beim Verkleinern grau.

Skalierungsverhalten

Mit der fraktalen Eigenschaft könnten wir jedoch mehrere Muster mit unterschiedlicher Auflösung überlagern, um den Bildkontrast im gewünschten Bereich stabil zu halten. Unten sehen Sie ein Beispiel für ein 4-Ebenen-Muster (512 x 512 GIF). Dieses Ergebnis ist eher an Brown'sches Rauschen angelehnt und auch kaum JPEG-komprimierbar.

4 Schichtkombination


5

Ich vermute, das schlechteste komprimierbare Muster wäre weißes Rauschen (mit gleichmäßiger Verteilung). Es muss bei verschiedenen Auflösungen verrauscht aussehen, daher können Sie die verrauschten Bilder im Skalierungsbereich erstellen und dann zusammenfügen:

ich=ichnNichGich

ichNichichGichichσ

Ein besserer Weg, ein solches Bild zu konstruieren, wäre vielleicht, direkt im Frequenzbereich zu arbeiten.

  1. Erstellen Sie ein Bild mit weißem Rauschen.
  2. Führen Sie eine 8x8-Block-IDCT (Inverse Discrete Cosine Transform) für das Bild durch.

Das Ergebnis wäre das schlechteste komprimierbare Muster für JPEG, da es die höchste Entropie im DCT-Bereich aufweist. Ich bin mir aber nicht sicher, wie sich das bei unterschiedlichen Auflösungen verhalten wird.


5

In IIRC ist der JPEG-Dekomprimierungsalgorithmus angegeben, der genaue Komprimierungsalgorithmus jedoch nicht. Verschiedene Algorithmen können eine legale JPEG-Datei erzeugen. Sie müssen dies also auf den von Ihnen ausgewählten Bildkomprimierungsprogrammen testen.

Alles kann mit einem verlustbehafteten Kompressor wie JPEG um den gleichen Betrag komprimiert werden. Es ist nur so, dass bei jeder festen Komprimierungsstufe die Qualität der Komprimierung je nach Bild variieren kann (das Rauschen oder der Fehler im dekomprimierten Ergebnis nimmt zu). Sie möchten also etwas, das dem dekomprimierten Ergebnis ein Maximum an Rauschen hinzufügt. Dazu möchten Sie den maximalen Fehler zum Entfernen von Hochfrequenz-Makroblock-Koeffizienten und zum Quantisieren von Koeffizienten.

Was wahrscheinlich unterschiedliche und hochfrequente Streikposten sowie unterschiedliche Grau- und Farbskalen bedeutet, die zufällig zwischen möglichen Quantisierungsstufen des gegebenen Kompressors bei einer gegebenen Einstellung liegen.

Da dies bei jeder Beleuchtung in beliebiger Entfernung funktionieren soll, müssen Sie die Frequenz der Streikposten (möglicherweise fraktal oder nur mit zufälliger Frequenzmodulation) sowie die Farb- und Graustufen (nicht kohärent, z. B. variieren die Streikposten) variieren Farben und die Ebenen unabhängig voneinander). Die Farbtonvarianz hängt weniger von der Entfernung ab, daher müssen diese nur ausgewählt werden, um für die ausgewählten Quantisierer einen schlechteren Fall zu erzielen. Die durchschnittliche Größe der Farbmuster kann doppelt so groß sein wie die Leuchtdichtemuster, um der 4: 1: 1 (Flächen-) YUV-Makroblockzusammensetzung zu entsprechen.

Ich würde mit einem Bündel von farbintensiven Moire-Mustern in wild variierenden Maßstäben beginnen, die fraktal überlagert und / oder zusammengefügt sind.


2

Lassen Sie mich das Muster teilen, das ein sehr flaches Spektrum aufweist (wie das weiße Rauschen). Daher ist es sehr schwierig, dieses Muster mit JPG zu komprimieren. Das folgende Beispielbild wird viermal vergrößert.

Das Muster selbst ist regelmäßig, aber nicht periodisch und kann leicht durch den deterministischen Algorithmus erzeugt werden. Es hat auch eine fraktale Eigenschaft.

Nichtperiodisches Muster mit quasi weißem Rauschspektrum

Von weitem gesehen: Original weit


2

Zufälliges Rauschen wird tatsächlich sehr schlecht komprimiert. Sie können es in Farbe erzeugen, indem Sie unabhängige R-, G- und B-Werte erzeugen.

Wenn Sie aus der Ferne schauen, wird das Rauschen zwar entfernt (durch Tiefpassfilterung), und Sie können dies vermeiden, indem Sie Rauschbilder mit unterschiedlichen Auflösungen, dh mit immer größeren Pixeln, erstellen und überlagern.

Wenn Sie die Bilder hinzufügen, haben Sie das Problem des Wertebereichs, der mit der Anzahl der Bilder wächst, lassen Sie N. Wenn Sie sie nur mitteln, nimmt die Rauschamplitude mit 1 / N ab.

Wenn Sie nichtkorreliertes gleichmäßiges Rauschen wählen, führt die Überlagerung zu einer Quasi-Gauß-Verteilung mit √N-Standardabweichung. Anstatt durch N zu teilen, können Sie durch √N (mit geeigneter Neuzentrierung) dividieren, um die Amplitudenreduzierung zu begrenzen.

Schließlich denke ich, dass es besser ist, die Werte umfließen zu lassen, als sie zu sättigen, da gesättigte Werte große, gleichmäßige Bereiche bilden.


2

Hier ist ein weiterer Ansatz, mit dem RGB-Brown'sches Rauschen (4096 x 4096 GIF) erzielt wird. RGB-Brown'sches Rauschen


0

Erstaunliche Frage! Im Konzept ist das weiße Rauschen ein Signal, das sich nicht ändert, wenn es zeitskaliert wird. Ebenso ändert sich ein Fraktal nicht, wenn es in der Größe skaliert wird. Ein verlustbehafteter Komprimierungsprozess nimmt nur das wichtigste Spektrum (Zeit oder Größe) in Anspruch, daher riechen Fraktale und Geräusche nach Keksen. Daher sollten Sie mit den Farben und Mustern Ihres Stoffes spielen. Sie müssen Fraktale sein, und das Fraktalverhalten muss zufällig generiert werden. Sie sollten einen Stoff erhalten, der im Foto schwarz aussieht (im CMY-Farbraum), in der realen Welt jedoch ein buntes Muster aufweist.

Viel Glück! , und wenn du die Antwort bekommst, poste sie bitte !!!


"Sie sollten einen Stoff erhalten, der auf dem Foto schwarz aussieht" <- Wäre er in diesem Fall nicht leicht komprimierbar?
Nicolas Raoul
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.