Есть ли способ восстановить поврежденные файлы JPEG?

Мне интересно, есть ли способ восстановить поврежденные файлы JPEG.

Они были повреждены, потому что я удалил папку из-за ошибки и быстро восстановил ее с помощью программного обеспечения для восстановления. Большинство фотографий в порядке, но некоторые из них имеют проблемы, такие как

  • серые зоны внизу
  • сдвиги цвета/изображения некоторых полос изображения

Я попытался проверить целостность с помощью jpeginfoинструмента, и он фактически показал мне, что у этих фотографий были некоторые проблемы, связанные с битовым потоком контрольной суммы Хауфмана.

Существуют ли какие-либо инструменты, с помощью которых можно попытаться восстановить эти изображения? Некоторые из них ясно показывают, что данные все еще там, просто перепутаны.

Можем ли мы объединить два вопроса (один из матовых ссылок выше и этот)?
Какую программу вы использовали для открытия поврежденных изображений?

Ответы (3)

Это долгий путь, но если ваши файлы JPEG закодированы в прогрессивном режиме, вы можете восстановить версию поврежденного изображения с более низким разрешением.

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

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

Я считаю, что инструмент jpeginfo, который вы используете, скажет вам, является ли ваш jpeg прогрессивным или базовым, поэтому это будет быстрый тест, чтобы решить, нужно ли вам инвестировать больше времени в это потенциальное решение или нет.

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

Если проблема связана с алгоритмом Хаффмана (это часть сжатия JPEG без потерь), то ваши шансы восстановить информацию об изображении действительно минимальны. Хаффман, как и другие формы энтропийного кодирования, минимизирует избыточность информации в потоке данных, в идеале до абсолютного минимума. Это означает, что, скорее всего, нет «других частей» сжатого потока, которые можно использовать, чтобы узнать о природе отсутствующей или поврежденной части.

Тем не менее, может быть какой-то инструмент для восстановления конкретного образа, который у вас есть. В противном случае, некоторое ручное редактирование фотографий, как пример @mattdm в вопросе, на который он ссылается, спасет вашу фотографию.

Примечание: интересно прочитать первые два абзаца аннотации этого документа .

Я только что написал инструмент командной строки для анализа всей библиотеки и извлечения предупреждений/ошибок с помощью jpeginfo. Он сообщил о многих различных проблемах, поэтому я думаю, что буду изучать их дальше. Я практичный формат JPEG, поэтому я мог бы попытаться увидеть, что можно восстановить, но это потребовало бы много времени, поэтому я попросил готовый инструмент :) Вот сценарий для дальнейшего использования: pasteie.org/4039144 (он требует jpeginfo и Groovy )

серые зоны внизу

Они часто являются результатом одной из трех проблем:

  1. Файл был обрезан, обрезан по какой-то причине. Самый простой способ определить это — сравнить размер файла с размером изображения, снятого с тем же устройством + настройками.

  2. Размер файла = нормально, но при открытии в шестнадцатеричном редакторе половина файла состоит из нулей.

  3. Недопустимые данные в битовом потоке JPEG. Декодеры интерпретируют любые пары байтов FF xx как маркеры JPEG. Если FF xx не соответствует допустимому маркеру, большинство декодеров прекращают декодирование. Это (1) является результатом того, что (2), (3) и (4) являются разными этапами ремонта, остальные повреждения необходимо исправить в фотоателье или подобном:

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

сдвиги цвета/изображения некоторых полос изображения

Сдвиг также может быть вызван повреждением данных внутри «битового потока JPEG».

Полосатый, сложнее сказать, что вы имеете в виду. Если вы имеете в виду вот так:

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

Затем мы имеем дело с множеством искажений в битовом потоке, хотя они являются результатом смешанных данных:

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

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

Иногда можно исправить даже множество повреждений, но это может занять до нескольких часов работы над файлом:

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

Другой вариант «полос» или, лучше сказать, диагональных узоров может быть вызван заголовком, не представляющим правильные настройки кодировщика, что часто является результатом неправильно восстановленных файлов:

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

У меня есть скриншот восстановления этого конкретного файла здесь https://youtu.be/jhJtej2UI20

Возможность восстановления файла зависит от того, сохранена ли основная часть данных JPEG. Как зависит от причины. Полусерое изображение восстанавливается путем «исправления» данных JPEG.

У нас нет возможности исправить пример смешанных данных Windows Explorer, их нужно будет правильно восстановить.

Подводя итог, мы можем восстановить только те, в которых данные JPEG в значительной степени сохранились. Размер файла — это раздача, а также быстрый просмотр с помощью шестнадцатеричного редактора. Если файлы выглядят нормально, а данные внутри файла выглядят «случайными» (высокая энтропия), есть вероятность, что их можно исправить. Однако, если вы видите повторяющееся повреждение файла за файлом, возможно, вы имеете дело с проблемой файловой системы, и лучше попытаться восстановить данные на другой диск.