Ich versuche, Bildinhalt aus einer Datei zu extrahieren, die von Hamamatsu NanoZoomer Slidescanner generiert wurde. Die NDPI-Datei verwendet eine modifizierte TIFF-Struktur und speichert Bildinhalte in einem großen Chunk im JPEG-Format. Mit StripOffsets und StripByteCounts kann ich die Daten extrahieren, die eine JPEG-Datei sein sollen.Wie kann ich ein JPEG-Bild mit mehr als 65500 * 65500 Pixeln richtig öffnen/dekodieren?
Der Datenstrom hat die korrekte Signatur für eine JPEG-Datei, z. B. FFD8, der Anfang der Scan-Markierung und FFD9, das Ende der Scan-Markierung. Wenn dies ein Bild kleiner als 65500 * 65500 Pixel ist, dann kann ich die Datei problemlos öffnen, wenn ich den Datenstrom in eine JPEG-Datei speichere.
In einem JFIF-Header stellen das dritte und vierte Byte nach dem FFC0-Marker die Bildhöhe dar; Die zwei Bytes repräsentieren danach die Bildbreite. Bei einem Bild, das größer als 65500 * 65500 Pixel ist (was tatsächlich 122880 * 78848 Pixel entspricht), sind diese vier Bytes, die vermutlich Bildhöhe und Bildbreite repräsentieren, alle Nullen. Ich änderte sie zu 255, 220, 255, 220, nach this (Zeile 255-263). Als ich die JPEG-Informationen durch einen Rechtsklick in Windows überprüfte und Details auswählte, habe ich gesehen, dass Windows Photo Viewer die Auflösung als 65500 * 65500 gelesen hat, obwohl sie nicht die tatsächliche Pixelauflösung darstellen. Das Problem ist, wenn ich versucht habe, das Bild zu öffnen, wird es anscheinend falsch dekodiert.
Also meine Frage ist: Wie kann ich eine solche JPEG-Datei richtig öffnen? Oder wie kann ich die Gesamtheit solcher Bildinhalte korrekt in den Speicher entschlüsseln?
Ich versuche jetzt, die Dateistruktur mit MATLAB zu verstehen. Schließlich werde ich Python + OpenCV (oder wenn nötig mit Python + Cython + libjpeg-turbo) verwenden, um das gesamte Bild in den Speicher zu lesen.
Da ich Ihr Bild nicht zum Testen habe, ist es sehr schwer zu sagen, aber wenn Sie mit großen Bildern zu tun haben, ziehen Sie definitiv 'vips' in Betracht. Es zeichnet sich dadurch aus ... http://stackoverflow.com/a/36377369/2836621 –
Ich glaube, dass dies ein libjpeg oder libjpeg-turbo Problem ist. VIPS benutzt eines von beiden. Wenn Sie also nur zu VIPS wechseln, wird dieses Problem nicht gelöst. – user3667217
Ich habe meine eigene Bildgebungsbibliothek (einschließlich benutzerdefinierten JPEG-Codec) geschrieben und dieses Bild könnte möglicherweise durch meinen Code geöffnet werden. Die extreme Größe stellt ein Problem dar, um alles auf einmal zu öffnen. Ich könnte entweder eine skalierte Kopie (1/8 x 1/8 = 14848/12800) öffnen oder eine bestimmte rechteckige Kopie davon öffnen. Das unkomprimierte Vollbild der Farbe würde 36 GB RAM erfordern. – BitBank