Reparar arquivos jpg quebrados

11

Olá, tenho certeza de que foram feitas muitas perguntas semelhantes, mas, depois de pesquisar muito, não encontrei nenhum post descrevendo minha situação.

Eu tenho alguns arquivos jpg que têm algumas cores erradas após um certo ponto e também todos os pixels são deslocados para a esquerda. Eu acho que isso é por causa de alguns bytes ausentes no ponto em que muda. Tentei editar o arquivo com o vi, mas parece impossível descobrir onde estão os bytes ausentes, também é muito complicado usar o vi. Eu também tentei nano, mas não é seguro para binários.

Esta é uma das imagens em questão:

insira a descrição da imagem aqui

Então, eu quero lhe fazer duas perguntas:

  1. Como posso reparar essas imagens no Linux?
  2. Como eu poderia abrir e editar com segurança o arquivo em um editor de texto binário no Linux?

Edit: using hexedit, descobri que da posição 0x27F000 a 0x27F403 existem apenas 0xff e de 0x27F404 a 0x27FFFF existem apenas zeros 0x00. Isso torna algo como isto:

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

Alterando esses bytes com números aleatórios, consegui desviar a imagem, mas ainda há o problema de cores.

Alguém poderia me indicar alguma documentação sobre a codificação jpeg para que eu possa descobrir como saber onde termina um bloco 8x8.

Eu estou querendo saber por que as posições são tão precisas (0x27F000 a 0x27FFFF), isso poderia ser um bug da minha câmera ou do cartão de memória que eu usei?

Falk
fonte
Isso aconteceu uma vez com um grande conjunto de imagens. Acabei de excluí-los, uma pena mesmo. Eu ficaria interessado em saber se você conseguir consertá-las, você tem um trabalho difícil pela frente.
dtmland
Sim, é uma pena, estou tentando descobrir como esses arquivos JPEG são codificados, é apenas uma linha de 8x4000px que precisarei excluir. Neste arquivo, existem exatamente 4KB danificados em um arquivo de 4,4MB É menos de 0,1% !!!
Falk

Respostas:

2

O artigo da wikipedia em http://en.wikipedia.org/wiki/JPEG#Entropy_coding possui muitas informações - a mais relevante para o seu problema atual é esta:

O coeficiente DC quantizado anterior é usado para prever o coeficiente DC quantizado atual. A diferença entre os dois é codificada em vez do valor real. A codificação dos 63 coeficientes CA quantizados não usa essa diferenciação de previsão.

A mudança de cor no restante da imagem é causada por um único coeficiente de CC ruim que cai em cascata para todo o resto. Você pode encontrar uma área pequena (talvez um byte, talvez dois - provavelmente é uma sequência de bits) que afeta de maneira confiável as cores e tentar um grande número de valores diferentes para isso.

Pode ser mais fácil corrigir a imagem em um editor gráfico - parece que a que você postou, exceto a mudança (e envolvente), pode simplesmente ter um brilho mais baixo, você pode selecionar a área e usar a ferramenta Níveis. Para outras que envolvem mudanças de cores, é possível obter um resultado bom o suficiente observando a decomposição nos canais de cores (os JPGs podem estar em RGB ou Y'CbCr) e corrigindo cada canal separadamente, possivelmente trocando de canal.

EDIT: Opa, eu não vi quantos anos sua pergunta tinha. Bem, talvez isso seja útil para você ou outra pessoa.

Random832
fonte
Muito obrigado, não se preocupe com a idade da pergunta, ainda tem a imagem e um pouco mais.
Falk
Eu acho uma pena que a câmera não esperasse tal situação, eles deveriam colocar alguns blocos de teclas a cada n (digamos 32) linhas de blocos. o outro problema é que eu nem sei se existe uma compressão sem perdas aplicada após a perda, como Huffman. Prefiro brincar com alguns bytes do que abrir a imagem com editores gráficos: primeiro a maioria deles não deseja abrir essas imagens, segundo, acho que não consigo encontrar a correção exata brincando com alguns controles deslizantes. @ Random832 obrigado e por favor me diga se você sabe algo mais.
Falk
1

2) Como eu poderia abrir e editar o arquivo com segurança em um editor de texto binário no Linux?

Muitos editores binários excelentes podem ser encontrados aqui: /programming/839227/how-to-edit-binary-file-on-the-unix-systems

Meus favoritos pessoais são vim com:%! Xxd hack e hexedit

Viacheslav Rodionov
fonte
2
Ok, e algo mais fácil de usar? como nano.
Falk
algo fácil como shed?
Attie
0

Você já tentou photorec? Você pode instalá-lo no Ubuntu assim:

sudo apt-get install testdisk

Verifique o manual com:

man photorec

e apenas corra photorecdo terminal assim:

photorec

Ele solicitará que você selecione a fonte e o destino e tente recuperar os arquivos jpg automaticamente.

Para evitar danificar o original, recomendo fazer uma cópia com o ddcomando Boa sorte!

Vincent Gerris
fonte
1
Olá, o photorec foi projetado para recuperar arquivos de um sistema de arquivos corrompido. No meu caso, o sistema de arquivos está bem, mas a imagem está corrompida, portanto é uma situação totalmente diferente.
Falk
3
Oi, como escrevi anteriormente, não há nada de errado com o sistema de arquivos, é o arquivo JPEG que tem o erro, obrigado mesmo assim.
Falk
1
Eu sei como o photorec funciona, e não é o que eu preciso, ele apenas copia a imagem como está sem repará-la.
Falk
1
Eu só estou tentando ajudar. Você digita faria, então você não tentou? Na verdade, eu o executei em um cartão SD e sim, ele é copiado, mas também foi corrigido. Não pode machucar tentar, certo? Se não vale a pena tentar, tudo bem, boa sorte. Tudo o que estou dizendo é que ele reparou para mim. Não responderei mais para evitar discussões sem fim.
22720 Vincent Vincent,
1
Não vou experimentá-lo porque o registro fotográfico é executado com um dispositivo como parâmetro, o arquivo jpg que eu tenho está no meu disco rígido, o que é perfeitamente bom. É apenas um tipo diferente de situação. Como eu disse obrigado de qualquer maneira.
Falk
-1

Acabei de usar o Photorec para recuperar fotos de um cartão SD corrompido. Embora não tenha recuperado todos os arquivos, ele fez um ótimo trabalho ao recuperar um bom número deles. Com isso dito, os vídeos MP4 foram recuperados, mas não puderam ser abertos. Alguns arquivos JPEG foram recuperados, mas também não puderam ser visualizados ou realmente foram alterados, como a amostra fornecida no início deste segmento. O Photorec não os corrigiu.

Conclusão: O Photorec foi projetado para recuperar arquivos perdidos de um FILE SYSTEMS corrompido, mas aparentemente não faz nada para recuperar o conteúdo de FILES corrompidos.

Wander Stabenow
fonte
Olá, Wander, conheço o photorec, mas não é o que estou procurando. Não irá corrigir arquivos corrompidos.
Falk