Reparieren Sie defekte JPG-Dateien

11

Hallo, ich bin mir sicher, dass viele ähnliche Fragen gestellt wurden, aber nachdem ich viel gesucht habe, habe ich keinen Beitrag gefunden, der meine Situation beschreibt.

Ich habe einige JPG-Dateien, deren Farben nach einem bestimmten Punkt falsch sind, und außerdem wird jedes Pixel nach links verschoben. Ich denke, das liegt an einigen fehlenden Bytes an dem Punkt, an dem es sich ändert. Ich habe versucht, die Datei mit vi zu bearbeiten, aber es scheint unmöglich herauszufinden, wo sich die fehlenden Bytes befinden. Außerdem ist die Verwendung von vi sehr kompliziert. Ich habe auch Nano ausprobiert, aber es ist nicht binärsicher.

Dies ist eines der fraglichen Bilder:

Geben Sie hier die Bildbeschreibung ein

Deshalb möchte ich Ihnen zwei Fragen stellen:

  1. Wie kann ich solche Images unter Linux reparieren?
  2. Wie kann ich die Datei in einem binären Texteditor unter Linux sicher öffnen und bearbeiten?

Bearbeiten: Mit hexedit habe ich festgestellt, dass es von Position 0x27F000 bis 0x27F403 nur Einsen 0xff und von 0x27F404 bis 0x27FFFF nur Nullen 0x00 gibt. Das macht so etwas:

    0027EFF0   F8 83 C3 E2  09 35 AF 13  44 6E C5 FD  C7 EF 23 E8  .....5..Dn....#.
    0027F000   FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF  ................
    [...]
    0027F400   FF FF FF FF  00 00 00 00  00 00 00 00  00 00 00 00  ................
    [...]
    0027FFF0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
    00280000   8F 39 6E 47  4F 43 5F 36  7C 73 66 F1  0D AE AD AF  .9nGOC_6|sf.....

Ändern dieser Bytes durch Zufallszahlen Ich konnte das Bild verschieben, aber es gibt immer noch das Farbproblem.

Könnte mich jemand auf eine Dokumentation zur JPEG-Codierung verweisen, damit ich herausfinden kann, wo ein 8x8-Block endet.

Ich frage mich, warum die Positionen so genau sind (0x27F000 bis 0x27FFFF). Könnte dies ein Fehler meiner Kamera oder der von mir verwendeten Speicherkarte sein?

Falk
quelle
Ich hatte dies einmal mit einer großen Anzahl von Bildern passiert. Ich habe sie gerade gelöscht, wirklich schade. Es würde mich interessieren, ob es Ihnen gelingt, diese zu reparieren. Sie haben einen schwierigen Job vor sich.
dtmland
Ja, es ist eine Schande, ich versuche herauszufinden, wie diese JPEG-Dateien codiert sind. Es ist nur eine 8x4000px-Zeile, die ich löschen muss. In dieser Datei sind genau 4 KB in einer Datei von 4,4 MB beschädigt. Es sind weniger als 0,1% !!!
Falk

Antworten:

2

Der Wikipedia-Artikel auf http://en.wikipedia.org/wiki/JPEG#Entropy_coding enthält viele Informationen - das relevanteste für Ihr aktuelles Problem ist dieses:

Der vorherige quantisierte Gleichstromkoeffizient wird verwendet, um den aktuellen quantisierten Gleichstromkoeffizienten vorherzusagen. Die Differenz zwischen den beiden wird eher als der tatsächliche Wert codiert. Die Codierung der 63 quantisierten Wechselstromkoeffizienten verwendet keine solche Vorhersagedifferenzierung.

Die Farbverschiebung im Rest des Bildes wird durch einen einzelnen schlechten Gleichstromkoeffizienten verursacht, der zu allen anderen kaskadiert. Möglicherweise können Sie einen kleinen Bereich finden (vielleicht ein Byte, vielleicht zwei - es ist wahrscheinlich tatsächlich eine Folge von Bits), der die Farben zuverlässig beeinflusst, und eine große Anzahl verschiedener Werte dafür ausprobieren.

Es ist möglicherweise einfacher, das Bild einfach in einem Grafikeditor zu korrigieren. Es sieht so aus, als ob das von Ihnen veröffentlichte Bild, abgesehen von der Verschiebung (und dem Umlauf), einfach eine geringere Helligkeit aufweist. Sie können den Bereich auswählen und das Ebenen-Werkzeug verwenden. Bei anderen, bei denen es mehr um Farbverschiebungen geht, können Sie möglicherweise ein ausreichend gutes Ergebnis erzielen, indem Sie die Zerlegung in Farbkanäle (JPGs können in RGB oder Y'CbCr vorliegen) betrachten und jeden Kanal separat festlegen und möglicherweise die Kanäle vertauschen.

EDIT: Ups, ich habe nicht gesehen, wie alt deine Frage war. Nun, vielleicht ist dies für Sie oder jemand anderen nützlich.

Random832
quelle
Vielen Dank, kümmere dich nicht um das Alter der Frage, habe noch das Bild und noch mehr.
Falk
Ich finde es schade, dass die Kamera eine solche Situation nicht erwartet hat, sie sollte alle n (sagen wir 32) Blockreihen einige Schlüsselblöcke setzen. Das andere Problem ist, dass ich nicht einmal weiß, ob nach dem verlustbehafteten eine verlustfreie Komprimierung angewendet wird, wie bei Huffman. Ich spiele lieber mit einigen Bytes herum, als das Bild mit Grafikeditoren zu öffnen: Erstens möchten die meisten diese Bilder nicht öffnen, zweitens glaube ich nicht, dass ich die genaue Korrektur finden könnte, die mit einigen Schiebereglern herumspielt. @ Random832 danke und bitte sag mir wenn du etwas mehr weißt.
Falk
1

2) Wie kann ich die Datei in einem binären Texteditor unter Linux sicher öffnen und bearbeiten?

Viele großartige binäre Editoren finden Sie hier: /programming/839227/how-to-edit-binary-file-on-the-unix-systems

Meine persönlichen Favoriten sind vim mit:%! Xxd hack und hexedit

Viacheslav Rodionov
quelle
2
Ok, und etwas einfacher zu bedienen? wie Nano.
Falk
so etwas wie einfach shed?
Attie
0

Hast du es versucht photorec? Sie können es unter Ubuntu wie folgt installieren:

sudo apt-get install testdisk

Überprüfen Sie das Handbuch mit:

man photorec

und einfach so photorecvom Terminal laufen :

photorec

Sie werden aufgefordert, die Quelle und ein Ziel auszuwählen und zu versuchen, JPG-Dateien automatisch wiederherzustellen.

Um eine Beschädigung des Originals zu vermeiden, empfehle ich, mit dem ddBefehl eine Kopie zu erstellen. Viel Glück!

Vincent Gerris
quelle
1
Hallo, photorec wurde entwickelt, um Dateien aus einem beschädigten Dateisystem wiederherzustellen. In meinem Fall ist das Dateisystem in Ordnung, aber das Image ist beschädigt, sodass es eine völlig andere Situation ist.
Falk
3
Hallo, wie ich bereits geschrieben habe, ist am Dateisystem nichts auszusetzen, es ist die JPEG-Datei, die den Fehler hat, trotzdem danke.
Falk
1
Ich weiß, wie Photorec funktioniert, und es ist nicht das, was ich brauche. Es würde nur das Bild kopieren, wie es ist, ohne es zu reparieren.
Falk
1
Ich versuche nur zu helfen. Sie würden tippen, also haben Sie es nicht versucht? Ich habe es tatsächlich auf einer SD-Karte ausgeführt und ja, es kopiert sie, aber es hat sie auch repariert. Kann nicht schaden, es zu versuchen, oder? Wenn es sich nicht lohnt, es zu versuchen, gut, viel Glück. Ich sage nur, dass es für mich repariert wurde. Ich werde nicht weiter antworten, um endlose Diskussionen zu vermeiden.
Vincent Gerris
1
Ich werde es nicht versuchen, da photorec mit einem Gerät als Parameter ausgeführt werden soll. Die JPG-Datei, die ich habe, befindet sich auf meiner Festplatte, was vollkommen in Ordnung ist. Es ist nur eine andere Art von Situation. Wie gesagt trotzdem danke.
Falk
-1

Ich habe gerade Photorec verwendet, um Bilder von einer beschädigten SD-Karte wiederherzustellen. Obwohl nicht alle Dateien wiederhergestellt wurden, hat es eine gute Arbeit geleistet, eine gute Anzahl von ihnen wiederherzustellen. Trotzdem wurden MP4-Videos wiederhergestellt, konnten aber nicht geöffnet werden. Einige JPEG-Dateien wurden wiederhergestellt, aber sie konnten auch nicht angezeigt werden oder waren wirklich durcheinander, wie das Beispiel am Anfang dieses Threads zeigt. Photorec hat sie nicht behoben.

Fazit: Photorec wurde entwickelt, um verlorene Dateien aus einem beschädigten DATEISYSTEM abzurufen, unternimmt jedoch anscheinend nichts, um den Inhalt beschädigter DATEIEN wiederherzustellen.

Wander Stabenow
quelle
Hallo Wander, ich kenne mich mit Fotorec aus, aber es ist nicht das, wonach ich suche. Beschädigte Dateien werden nicht repariert.
Falk