Reparación de archivos jpg rotos

11

Hola, estoy seguro de que se hicieron muchas preguntas similares, pero después de buscar mucho no encontré ninguna publicación que describiera mi situación.

Tengo algunos archivos jpg que tienen algunos colores incorrectos después de un cierto punto y también cada píxel se desplaza hacia la izquierda. Creo que esto se debe a que faltan algunos bytes en el punto donde cambia. Traté de editar el archivo con vi pero parece imposible descubrir dónde están los bytes faltantes, también vi es muy complicado de usar. También probé nano pero no es seguro para binarios.

Esta es una de las imágenes en cuestión:

ingrese la descripción de la imagen aquí

Entonces quiero hacerte dos preguntas:

  1. ¿Cómo puedo reparar esas imágenes en Linux?
  2. ¿Cómo podría abrir y editar el archivo de forma segura en un editor de texto binario en Linux?

Editar: usando hexedit descubrí que desde la posición 0x27F000 a 0x27F403 solo hay unos 0xff, y de 0x27F404 a 0x27FFFF solo hay ceros 0x00. Esto hace algo como esto:

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

Cambiando estos bytes con números aleatorios pude quitar la imagen, pero aún existe el problema del color.

¿Podría alguien indicarme alguna documentación sobre la codificación jpeg para poder descubrir cómo termina un bloque de 8x8?

Me pregunto por qué las posiciones son tan precisas (0x27F000 a 0x27FFFF), ¿podría ser un error de mi cámara o de la tarjeta de memoria que utilicé?

Falk
fuente
Esto sucedió una vez a un gran conjunto de imágenes. Acabo de eliminarlos, una pena realmente. Me interesaría saber si logras repararlos, tienes un trabajo difícil por delante.
dtmland
Sí, es una pena, estoy tratando de descubrir cómo están codificados estos archivos jpeg, es solo una línea de 8x4000px que tendré que eliminar. En este archivo hay exactamente 4KB dañados en un archivo de 4.4MB. ¡¡¡Es menos del 0.1% !!!
Falk

Respuestas:

2

El artículo de Wikipedia en http://en.wikipedia.org/wiki/JPEG#Entropy_coding tiene mucha información, la más relevante para su problema actual es esta:

El coeficiente DC cuantificado anterior se usa para predecir el coeficiente DC cuantificado actual. La diferencia entre los dos está codificada en lugar del valor real. La codificación de los 63 coeficientes de CA cuantizados no utiliza dicha diferenciación de predicción.

El cambio de color en el resto de la imagen es causado por un solo coeficiente de CC malo que cae en cascada con todo el resto. Es posible que pueda encontrar un área pequeña (tal vez un byte, tal vez dos, probablemente sea una secuencia de bits) que afecte de manera confiable a los colores y pruebe una gran cantidad de valores diferentes para eso.

Puede ser más fácil simplemente arreglar la imagen en un editor gráfico: se parece a la que publicó, que no sea el cambio (y envolvente), simplemente puede tener un brillo más bajo, puede seleccionar el área y usar la herramienta Niveles. Otros que tienen cambios de color más involucrados, es posible que pueda obtener un resultado lo suficientemente bueno mirando la descomposición en los canales de color (los JPG pueden estar en RGB o Y'CbCr) y arreglando cada canal por separado, posiblemente intercambiando canales.

EDITAR: Vaya, no vi cuántos años tenía tu pregunta. Bueno, tal vez esto sea útil para usted u otra persona.

Aleatorio832
fuente
Muchas gracias, no me importa la edad de la pregunta, todavía tengo la imagen y algo más.
Falk
Creo que es una pena que la cámara no esperara tal situación, deberían poner algunos bloques clave cada n (digamos 32) filas de bloques. el otro problema es que incluso no sé si se aplica una compresión sin pérdida después de la con pérdida, como Huffman. Prefiero jugar con algunos bytes que abrir la imagen con editores gráficos: primero, la mayoría de ellos no quieren abrir estas imágenes, segundo, no creo que pueda encontrar la corrección exacta jugando con algunos controles deslizantes. @ Random832 gracias y por favor dime si sabes algo más.
Falk
1

2) ¿Cómo podría abrir y editar el archivo de forma segura en un editor de texto binario en Linux?

Aquí se pueden encontrar muchos editores binarios excelentes: /programming/839227/how-to-edit-binary-file-on-the-unix-systems

Mis favoritos personales son vim con:%! Xxd hack y hexedit

Viacheslav Rodionov
fuente
2
Ok, y algo más fácil de usar? como nano
Falk
algo fácil como shed?
Attie
0

¿Lo has intentado photorec? Puedes instalarlo en Ubuntu así:

sudo apt-get install testdisk

Consulte el manual con:

man photorec

y simplemente correr photorecdesde la terminal así:

photorec

Le pedirá que seleccione la fuente y el destino e intente recuperar archivos jpg automáticamente.

Para evitar dañar el original, recomiendo hacer una copia con el ddcomando. ¡Buena suerte!

Vincent Gerris
fuente
1
Hola, photorec está diseñado para recuperar archivos de un sistema de archivos dañado, en mi caso el sistema de archivos está bien, pero la imagen está dañada, por lo que es una situación totalmente diferente.
Falk
3
Hola, como escribí anteriormente, no hay nada de malo en el sistema de archivos, es el archivo JPEG el que tiene el error, gracias de todos modos.
Falk
1
Sé cómo funciona photorec, y no es lo que necesito, simplemente copiaría la imagen tal como está sin repararla.
Falk
1
Solo estoy tratando de ayudar. ¿Teclearías, así que no lo intentaste? De hecho, lo ejecuté en una tarjeta SD y sí, los copia, pero también los reparó. No puede hacer daño intentarlo, ¿verdad? Si no vale la pena intentarlo, buena suerte. Todo lo que digo es que lo reparó por mí. No responderé más para evitar una discusión interminable.
Vincent Gerris el
1
No lo intentaré porque el fotorretrato debe ejecutarse con un dispositivo como parámetro, el archivo jpg que tengo está en mi disco duro, que está perfectamente bien. Es solo un tipo diferente de situación. Como dije gracias de todos modos.
Falk
-1

Acabo de usar Photorec para recuperar imágenes de una tarjeta SD que se dañó. Aunque no recuperó todos los archivos, hizo un gran trabajo recuperando un buen número de ellos. Dicho esto, los videos MP4 se recuperaron pero no se pudieron abrir. Se recuperaron algunos archivos JPEG, pero tampoco se pudieron ver o se desordenaron realmente, como se muestra en la muestra al comienzo de este hilo. Photorec no los reparó.

En pocas palabras: Photorec está diseñado para recuperar archivos perdidos de un SISTEMA DE ARCHIVO corrupto, pero aparentemente no hace nada para recuperar el contenido de ARCHIVOS corruptos.

Wander Stabenow
fuente
Hola, Wander, conozco photorec, pero no es lo que estoy buscando. No reparará los archivos corruptos.
Falk el