Ich erstelle ein Datenspeichergerät, das eine bestimmte Anzahl von Bildern des Nachthimmels über ein paar Stunden hinweg aufnimmt. Die Bilder werden direkt nach der Aufnahme heruntergeladen. Auf der Speicherkarte müssen alle Bilder gleichzeitig gespeichert werden können.
Die JPEGs, die aufgenommen werden, sind 640 x 480 Pixel, und es ist wichtig, dass auf der Speicherkarte genügend Platz für alle 100 vorhanden ist. Was ist die größte Größe eines 640 x 480 JPEG?
Ich habe einige Testbilder gemacht, um das herauszufinden:
- Die Dateigröße des "Stackoverflow" -Bildes beträgt 73.774 Bytes.
- Die Dateigröße des weißen Bildes beträgt nur 36.607 Bytes.
- Die Dateigröße für die karierten Fotouhren liegt aber bei 149.339 Bytes.
Ich gehe davon aus, dass die Dateigröße mit der Komplexität zunimmt.
Wie kann ich genug Platz auf der Speicherkarte schaffen, um 100 JPEGs (640 x 480) aufzunehmen, ohne zu wissen, wie kompliziert und wie groß diese sein werden? Ich möchte keinen zusätzlichen Platz verschwenden, da ich möglicherweise viele dieser Aufnahmegeräte herstelle.
quelle
Antworten:
Hier schlage ich eine Obergrenze für JPEG-Dateigrößen vor. Sehen der Antwort von Ilmari Karonen finden Sie eine Diskussion über typischere JPEG-Größen.
Der Pixelspeicherplatz für ein 640 × 480 32-Bit-Bitmap-Bild kann wie folgt berechnet werden (basierend auf dieser Antwort, aber korrigiert basierend auf dem Kommentar von Ignacio Vazquez-Abrams und dieser Antwort):
Dies ist die Größe einer unkomprimierten Bitmap und sollte daher eine Obergrenze für die Größe der JPEG-Datei sein (in Wirklichkeit, da das JPEG-Format die Komprimierung verwendet) , sollten Ihre Bilder viel kleiner sein, insbesondere wenn Sie Nachtaufnahmen machen Himmel, der meiner Meinung nach viel Schwarz enthält. Beachten Sie, dass das größte Beispielbild in Ihrer Frage nur 0,14 MB beträgt.
In Bezug auf Ihr spezielles Problem sind jedoch selbst bei Verwendung dieser Obergrenze von 100 Bildern nur 117 MB, und es ist lange her, dass ich eine Speicherkarte gesehen habe, die so klein wie 128 MB ist. Ich vermute, dass eine derzeit verfügbare Speicherkarte über genügend Kapazität verfügt, um Ihre Anforderungen zu erfüllen.
Anscheinend ist das Problem der maximalen JPEG-Dateigröße umstritten. Diese Stack Overflow-Antwort schlägt eine theoretische Maximalgröße von 20,25 Byte pro Pixel oder 5,9 MB in Ihrem Fall vor. Die Erstellung eines Bildes dieser Größe erfordert jedoch den absichtlichen Missbrauch des Komprimierungsschemas des JPEG-Formats eine Sache, die von einer Kamera produziert wird.
quelle
Lassen Sie mich zur Überprüfung die Analyse von ForeverWintr testen experimentell .
Die schlechteste Art von Eingabebild für die JPEG-Komprimierung (oder wirklich jede Komprimierung) ist gleichmäßig zufälliges RGB-Rauschen, das theoretisch inkomprimierbar ist. Lassen Sie mich mit den netpbm- Tools einige generieren :
(Gleichmäßig zufälliges RGB-Rauschen, verlustfreies PNG-Format, 903 kb)
OK, die unkomprimierte PPM-Datei ist also erwartungsgemäß 640 × 480 × 3 = 921.600 Byte lang plus 15 Byte für den minimalen PPM-Header. Der Versuch, sie mit dem PNG-Format verlustfrei zu komprimieren, führt zu einer Vergrößerung um 2157 Byte, die vermutlich von PNG-Headern und -Metadaten belegt wird, und möglicherweise zu einer leichten Ineffizienz des Komprimierungsalgorithmus, der versucht, inkomprimierbare Daten zu komprimieren.
(Ja, das sind 3 Bytes pro Pixel, nicht 4; selbst das PPM-Format, das so einfach ist wie ein Grafikdateiformat, ist nicht dumm genug, um ein nutzloses viertes Byte pro Pixel auf der Festplatte zu speichern. Möglicherweise gibt es einige Dies ist aus Ausrichtungsgründen vorteilhaft, insbesondere wenn Sie auch einen Alpha-Kanal speichern müssen. Diese Gründe gelten jedoch nicht, wenn Sie das Bild in eine Datei schreiben.)
OK, was ist mit JPEG? Versuchen wir zunächst, die Kompressionsverluste zu minimieren (Qualität = 100, kein Chroma-Subsampling, Gleitkomma-DCT). Leider wird im
pnmtojpeg
Handbuch nicht klar erklärt, wie alle relevanten Optionen festgelegt werden (die-sample
Option ist im Abschnitt "Optionen für Assistenten" aufgeführt, in dem nur auf eine Datei in der libjpeg-Dokumentation verwiesen wird). Daher konvertiere ich sie in die GIMP statt. Die resultierende Datei sieht folgendermaßen aus:(JPEG-komprimiertes RGB-Rauschen, Qualität = 100, kein Chroma-Subsampling, 876 kb)
Was, wie kann es kleiner sein? Habe ich nicht einfach gesagt, dass reines Rauschen inkompressibel ist? Nun, die Sache ist, dass selbst bei maximaler Qualität die normale JPEG-Komprimierung nicht ganz ist verlustfrei ist. Wenn Sie das Bild in GIMP erneut öffnen und mit dem Original vergleichen, können Sie feststellen, dass die Farbwerte einiger Pixel um ein oder zwei Schritte (von 256) verschoben wurden. Dies sind die Pixel, bei denen der JPEG-Komprimierungsalgorithmus "geschummelt" und hier ein wenig weggeworfen hat, und dort ein anderes, bei dem angenommen wurde, dass die Änderung nicht spürbar ist. Für das bloße menschliche Auge ist das Ergebnis zwar nicht vom Original zu unterscheiden, aber diese verworfenen Bits führen zu einer messbaren Verringerung der Dateigröße, selbst nach Berücksichtigung des Headers und des Codierungsaufwands.
Das war also höchste Qualität; Was ist mit typischeren Einstellungen wie den
pnmtojpeg
Standardeinstellungen (Qualität = 75, Unterabtastung aktiviert)? Lass es uns versuchen:(JPEG-komprimiertes RGB-Rauschen, Qualität = 75, Chroma-Unterabtastung, 184 kb)
Wow, von 901 auf 184 kb! Das ist allerdings eine ziemlich aggressive Komprimierung, und man kann den Unterschied definitiv feststellen, wenn man die Bilder genau vergleicht. Das meiste liegt an der Chroma-Unterabtastung, die im Grunde nur 75% der Farbdaten (Farbton / Sättigung) wegwirft. Wenn Sie es in GIMP mit deaktivierter Unterabtastung versuchen, erhalten Sie eine 350.618-Byte-Datei, die (zumindest für das menschliche Auge) dem Original ziemlich nahe kommt, auch wenn sie vergrößert ist.
Auf jeden Fall geht es darum zu demonstrieren, dass eine 640 × 480 JPEG-Datei , egal wie verrauscht Ihre Nachthimmelfotos sind und wie hoch die Qualität auch sein mag, auf keinen Fall signifikant größer als 900 sein kann kb. (Nun, es sei denn, Ihre Kamera hat ein Multi-Megabyte-Exif-Farbprofil oder etwas ähnlich Dummes angehängt.) Wenn Sie typischere JPEG-Komprimierungseinstellungen verwenden, wird die maximal plausible Dateigröße auf etwa 200 KB verringert .
quelle