Réparer les fichiers jpg cassés

11

Salut, je suis sûr qu'il y avait beaucoup de questions similaires posées, mais après avoir beaucoup cherché, je n'ai trouvé aucun post décrivant ma situation.

J'ai des fichiers jpg qui ont des couleurs incorrectes après un certain point et aussi chaque pixel est décalé vers la gauche. Je pense que c'est à cause de quelques octets manquants au point où cela change. J'ai essayé d'éditer le fichier avec vi mais il semble impossible de savoir où se trouvent les octets manquants, vi est également très compliqué à utiliser. J'ai aussi essayé le nano mais ce n'est pas sûr pour les binaires.

C'est l'une des images en question:

entrez la description de l'image ici

Je veux donc vous poser deux questions:

  1. Comment réparer de telles images sous Linux?
  2. Comment puis-je ouvrir et modifier le fichier en toute sécurité dans un éditeur de texte binaire sous Linux?

Edit: en utilisant hexedit, j'ai découvert que de la position 0x27F000 à 0x27F403, il n'y en a que 0xff, et de 0x27F404 à 0x27FFFF, il n'y a que des zéros 0x00. Cela fait quelque chose comme ça:

    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.....

En changeant ces octets avec des nombres aléatoires, j'ai pu décaler l'image, mais il y a toujours le problème de couleur.

Quelqu'un pourrait-il m'indiquer une documentation sur l'encodage JPEG afin que je puisse comprendre comment savoir où se termine un bloc 8x8.

Je me demande pourquoi les positions sont si précises (0x27F000 à 0x27FFFF), cela pourrait-il être un bug de ma caméra ou de la carte mémoire que j'ai utilisée?

Falk
la source
Je l'ai fait arriver une fois à un grand ensemble d'images. Je viens de finir de les supprimer, vraiment dommage. Je serais intéressé de savoir si vous réussissez à les réparer, vous avez un travail difficile devant vous.
dtmland
Oui, c'est dommage, j'essaie de comprendre comment ces fichiers jpeg sont encodés, c'est juste une ligne 8x4000px que je devrai supprimer. Dans ce fichier, il y a exactement 4 Ko endommagés dans un fichier de 4,4 Mo. C'est moins de 0,1% !!!
Falk

Réponses:

2

L'article de wikipedia sur http://en.wikipedia.org/wiki/JPEG#Entropy_coding contient beaucoup d'informations - la plus pertinente pour votre problème actuel est celle-ci:

Le coefficient DC quantifié précédent est utilisé pour prédire le coefficient DC quantifié actuel. La différence entre les deux est codée plutôt que la valeur réelle. Le codage des 63 coefficients AC quantifiés n'utilise pas une telle différenciation de prédiction.

Le changement de couleur dans le reste de l'image est causé par un seul mauvais coefficient CC qui se répercute sur tous les autres. Vous pourrez peut-être trouver une petite zone (peut-être un octet, peut-être deux - c'est probablement une séquence de bits) qui affecte de manière fiable les couleurs, et essayez un grand nombre de valeurs différentes pour cela.

Il peut être plus facile de simplement corriger l'image dans un éditeur graphique - elle ressemble à celle que vous avez publiée, autre que le décalage (et l'habillage), peut simplement avoir une luminosité plus faible, vous pouvez sélectionner la zone et utiliser l'outil Niveaux. Pour d'autres qui impliquent des changements de couleur plus complexes, vous pourriez obtenir un résultat suffisamment satisfaisant en examinant la décomposition en canaux de couleur (les JPG peuvent être en RVB ou en Y'CbCr) et en fixant chaque canal séparément, en échangeant éventuellement les canaux.

EDIT: Oups, je n'ai pas vu l'âge de votre question. Eh bien, peut-être que cela vous sera utile ou à quelqu'un d'autre.

Aléatoire832
la source
Beaucoup de remerciements, ne se soucient pas de l'âge de la question, ont toujours l'image et quelques autres.
Falk
Je pense que c'est dommage que la caméra ne s'attende pas à une telle situation, ils devraient mettre des blocs clés toutes les n (disons 32) rangées de blocs. l'autre problème est que je ne sais même pas s'il y a une compression sans perte appliquée après celle avec perte, comme Huffman. Je préfère jouer avec quelques octets plutôt que d'ouvrir l'image avec des éditeurs graphiques: d'abord la plupart d'entre eux ne veulent pas ouvrir ces images, ensuite je ne pense pas que je pourrais trouver la correction exacte en jouant avec certains curseurs. @ Random832 merci et dites-moi si vous en savez plus.
Falk
1

2) Comment ouvrir et éditer le fichier en toute sécurité dans un éditeur de texte binaire sous Linux?

Beaucoup de grands éditeurs binaires peuvent être trouvés ici: /programming/839227/how-to-edit-binary-file-on-the-unix-systems

Mes favoris personnels sont vim avec:%! Xxd hack et hexedit

Viacheslav Rodionov
la source
2
Ok, et quelque chose de plus facile à utiliser? comme nano.
Falk
quelque chose de facile comme shed?
Attie
0

As-tu essayé photorec? Vous pouvez l'installer sur Ubuntu comme ceci:

sudo apt-get install testdisk

Consultez le manuel avec:

man photorec

et exécutez simplement à photorecpartir du terminal comme ceci:

photorec

Il vous demandera de sélectionner la source et une destination et d'essayer de récupérer automatiquement les fichiers jpg.

Pour éviter d'endommager l'original, je recommande de faire une copie avec la ddcommande. Bonne chance!

Vincent Gerris
la source
1
Salut, photorec est conçu pour récupérer des fichiers à partir d'un système de fichiers corrompu, dans mon cas, le système de fichiers est très bien, mais l'image est corrompue donc c'est une situation totalement différente.
Falk
3
Salut, comme je l'ai écrit plus tôt, il n'y a rien de mal avec le système de fichiers, c'est le fichier JPEG qui a l'erreur, merci quand même.
Falk
1
Je sais comment fonctionne photorec, et ce n'est pas ce dont j'ai besoin, il suffit de copier l'image telle qu'elle est sans la réparer.
Falk
1
J'essaie juste d'aider. Vous avez tapé, donc vous n'avez pas essayé? En fait, je l'ai exécuté sur une carte SD et oui, il les copie, mais il les a également corrigés. Vous ne pouvez pas faire de mal à essayer, non? Si ça ne vaut pas la peine d'essayer, très bien, bonne chance. Tout ce que je dis, c'est qu'il l'a réparé pour moi. Je ne répondrai plus pour éviter une discussion sans fin.
Vincent Gerris
1
Je ne vais pas l'essayer parce que photorec est ment pour être exécuté avec un périphérique comme paramètre, le fichier jpg que j'ai est sur mon disque dur, ce qui est parfaitement bien. C'est juste un type de situation différent. Comme je l'ai dit, merci quand même.
Falk
-1

Je viens d'utiliser Photorec pour récupérer des images d'une carte SD corrompue. Bien qu'il n'ait pas récupéré tous les fichiers, il a fait un excellent travail en récupérant un bon nombre d'entre eux. Cela dit, les vidéos MP4 ont été récupérées mais n'ont pas pu être ouvertes. Certains fichiers JPEG ont été récupérés mais ils ne pouvaient pas non plus être consultés ou étaient vraiment foirés, comme l'exemple fourni au début de ce fil. Photorec ne les a pas corrigés.

Conclusion: Photorec est conçu pour récupérer des fichiers perdus à partir d'un SYSTÈME DE FICHIERS corrompu, mais ne fait apparemment rien pour récupérer le contenu des FICHIERS corrompus.

Wander Stabenow
la source
Salut, Wander, je connais photorec, mais ce n'est pas ce que je recherche. Il ne corrigera pas les fichiers corrompus.
Falk