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), может ли это быть ошибкой моей камеры или карты памяти, которую я использовал?

3 ответа3

1

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

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

Мои личные фавориты vim с:%!ххд хак и гекседит

1

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

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

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

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

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

0

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

sudo apt-get install testdisk

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

man photorec

и просто запустите photorec из терминала следующим образом:

photorec

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .