Восстановление поврежденных файлов jpg

10

Привет, я уверен, что было задано много похожих вопросов, но после долгих поисков я не нашел ни одного поста, описывающего мою ситуацию.

У меня есть несколько файлов JPG, которые имеют некоторые цвета неправильно после определенной точки, а также каждый пиксель смещен влево. Я думаю, что это из-за некоторых пропущенных байтов в точке, где это изменяется. Я попытался отредактировать файл с помощью vi, но невозможно определить, где находятся отсутствующие байты, также очень сложно использовать vi. Я также пробовал нано, но это не бинарно-безопасно.

Это одно из рассматриваемых изображений:

введите описание изображения здесь

Поэтому я хочу задать вам два вопроса:

  1. Как я могу восстановить такие образы в Linux?
  2. Как можно безопасно открыть и отредактировать файл в бинарном текстовом редакторе под Linux?

Редактировать: используя hexedit, я обнаружил, что от 0x27F000 до 0x27F403 есть только 0xff, а от 0x27F404 до 0x27FFFF только нули 0x00. Это делает что-то вроде этого:

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

Заменив эти байты случайными числами, я смог снять изображение, но проблема цвета все еще существует.

Может кто-нибудь указать мне документацию о jpeg-кодировании, чтобы я мог понять, как узнать, где заканчивается блок 8x8.

Мне интересно, почему позиции так точны (от 0x27F000 до 0x27FFFF), это может быть ошибка моей камеры или карты памяти, которую я использовал?

Фальк
источник
У меня было это однажды с большим набором изображений. Я просто удалил их, действительно позор. Мне было бы интересно узнать, если вам удастся починить их, у вас впереди тяжелая работа.
августа
Да, это позор, я пытаюсь выяснить, как закодированы эти файлы JPEG, это всего лишь одна строка 8x4000px, которую мне придется удалить. В этом файле точно 4 КБ повреждено в файле 4,4 МБ. Это менее 0,1% !!!
Фальк

Ответы:

1

2) Как можно безопасно открыть и отредактировать файл в бинарном текстовом редакторе под Linux?

Множество замечательных двоичных редакторов можно найти здесь: https://stackoverflow.com/questions/839227/how-to-edit-binary-file-on-the-unix-systems.

Мои личные фавориты vim с:%! Xxd hack и hexedit

Вячеслав Родионов
источник
2
Хорошо, а что-нибудь проще в использовании? как нано
Фальк
что-то простое, как shed?
Attie
1

Статья в Википедии на http://en.wikipedia.org/wiki/JPEG#Entropy_coding содержит много информации - наиболее актуальной для вашей текущей проблемы является эта:

Предыдущий квантованный коэффициент постоянного тока используется для прогнозирования текущего квантованного коэффициента постоянного тока. Разница между этими двумя кодируется, а не фактическое значение. Кодирование 63 квантованных коэффициентов переменного тока не использует такое различие предсказания.

Сдвиг цвета в остальной части изображения вызван одним плохим коэффициентом постоянного тока, который распространяется на все остальные. Возможно, вам удастся найти небольшую область (возможно, один байт, возможно, два - это, вероятно, фактически некоторая последовательность битов), которая надежно влияет на цвета, и попробовать для этого большое количество различных значений.

Может быть проще просто исправить изображение в графическом редакторе - оно выглядит так, как если бы вы разместили, кроме смещения (и обтекания), может просто быть более низкая яркость, вы можете выбрать область и использовать инструмент «Уровни». В других случаях, когда в большей степени задействованы смещения цвета, вы можете получить достаточно хороший результат, взглянув на декомпозицию в цветовых каналах (JPG могут быть в RGB или Y'CbCr) и исправив каждый канал отдельно, возможно, поменяв местами каналы.

РЕДАКТИРОВАТЬ: Ой, я не видел, сколько лет ваш вопрос. Ну, может быть, это будет полезно для вас или кого-то еще.

Random832
источник
Большое спасибо, не волнует возраст вопроса, все еще есть изображение и еще немного.
Фальк
Я думаю, это позор, что камера не ожидала такой ситуации, они должны поставить некоторые ключевые блоки каждые n (скажем, 32) рядов блоков. другая проблема в том, что я даже не знаю, применяется ли сжатие без потерь после потерь, как Хаффман. Я предпочел бы поиграть с некоторыми байтами, чем открыть изображение с помощью графических редакторов: во-первых, большинство из них не хотят открывать эти изображения, во-вторых, я не думаю, что смогу найти точную коррекцию, играя с некоторыми ползунками. @ Random832 спасибо, и, пожалуйста, скажите мне, если вы знаете что-то еще.
Фальк
0

Ты пробовал photorec? Вы можете установить его на Ubuntu следующим образом:

sudo apt-get install testdisk

Проверьте руководство с:

man photorec

и просто запустить photorecиз терминала так:

photorec

Он попросит вас выбрать источник и место назначения и попытаться восстановить jpg файлы автоматически.

Чтобы не повредить оригинал, я рекомендую сделать копию с помощью ddкоманды. Удачи!

Винсент Джеррис
источник
Привет, photorec предназначен для восстановления файлов с поврежденной файловой системы, в моем случае с файловой системой все в порядке, но изображение повреждено, так что это совершенно другая ситуация.
Фальк
Привет, вы можете использовать fsck для проверки и восстановления файловой системы. Я не уверен, предназначен ли он для него, но я получил более 1000 восстановленных jpg-файлов и других файлов на карте microSD с поврежденными файлами, на которых был запущен fsck, поэтому я бы сказал, попробуйте, если вам не безразличны файлы :) , Кроме того, я наткнулся на этот пост, потому что у меня была похожая ошибка при открытии изображения.
Винсент
2
Привет, как я писал ранее, в файловой системе нет ничего плохого, это ошибка в файле JPEG, в любом случае, спасибо.
Фальк
как я писал ранее, это работает независимо. Это также упоминается на странице руководства
Винсент
1
Я просто пытаюсь помочь. Вы печатали бы, чтобы вы не пробовали? Я фактически запустил его на SD-карте, и да, он копирует их, но это тоже исправило. Не больно попробовать, верно? Если не стоит пытаться, хорошо, удачи. Все, что я говорю, - то, что это действительно восстановило это для меня. Я не буду отвечать дальше, чтобы избежать бесконечной дискуссии.
Винсент