Статья Как восстановить размытое фото?

Статус
В этой теме нельзя размещать новые ответы.

fan7777

Местный
ЗАБАНЕН
Регистрация
27/9/20
Сообщения
997
Репутация
946
Реакции
3.460
RUB
0
Если вы планируете сделку с его участием, мы настоятельно рекомендуем вам не совершать ее до окончания блокировки. Если пользователь уже обманул вас каким-либо образом, пожалуйста, пишите в арбитраж, чтобы мы могли решить проблему как можно скорее.
Разработана опенсорсная утилита Depix для восстановления паролей с размытых скриншотов

c64699301c111696e412a.png


Результат работы программы Depix ( )

В голливудских фильмах любят преувеличивать. Они зуммируют фотографии в миллион раз — и выводят цифры из одного пикселя.

Хотя это невероятно, но научные исследования в этой области идут давно. Ещё в 90-е годы были опубликованы теоретические работы и PoC с восстановлением текста из размытых изображений. В 2012 году Владимир Южиков о своей программе SmartDeblur для восстановления смазанных и расфокусированных снимков.

Несмотря на достаточно хорошее развитие науки в данном направлении, до сих пор не было специализированного инструмента конкретно для восстановления паролей (текста) после пикселизации. Программа — первый такой инструмент.

В 2019 году руководитель видеогруппы Лаборатории компьютерной графики и мультимедиа ВМК МГУ Дмитрий Ватолин рассказывал о современном состоянии науки в части повышения резкости фотографий. Он говорил, что российская полиция постоянно просит его о помощи, хотя и не понимает сложности проблемы:

dfed1444fe8e52ed6f7e2.png


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

Что такое пикселизация?

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

Реализация алгоритма Depix атакует (то есть пытается обратить вспять результат работы) общего линейного фильтра для блока пикселей (linear box filter). Этот фильтр берёт блок пикселей и перезаписывает его средним значением всех пикселей в блоке. Реализация простая и быстрая, поскольку можно обрабатывать несколько блоков параллельно.

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

4zovvd7bahqapewulj9iclxrslq.png


Инструменты для снятия размытости, история и исследования

Изображения можно размыть множеством способов. Пикселизация линейными фильтрами для блоков пикселей — лишь один из вариантов. Большинство алгоритмов размытия склонны смешивать/растягивать пиксели, поскольку пытаются имитировать естественные размытия, которые вызваны движением камеры или расфокусировкой.

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

Выше мы привели ссылки на некоторые инструменты и исследования, опубликованные на Хабре с 2012 года.

Последние разработки в области искусственного интеллекта породили на свет причудливые заголовки в новостях, типа «Исследователи создали инструмент, который идеально повышает резкость лиц». На иллюстрации ниже — примеры из исследователей из университета Дьюка (США).

f0510797e3c1d30cc6c34.png

Работа алгоритма PULSE из университета Дьюка

Но на самом деле здесь ИИ не восстанавливает фотографии, а генерирует новые изображения, которые размываются в такие же пиксели. Фундамент этих работ заложен алгоритмом от 2016 года. ИИ генерирует лица, которые размываются в картинку, данную на входе. Важно понимать, что сгенерированное лицо не является оригиналом, из которого получено исходное размытое пятно.

Алгоритмы вроде PULSE кажутся новыми, но они ведут очень давнюю историю инструментов для удаления размытия. Ещё в 1994 году (!) Марк Буйе из Юго-западного исследовательского института (США) , размытия картинок и их сравнения с настоящими фотографиями, полученными с телескопа «Хаббл».

Восстановление номера

В широко известной от 2006 года Дхира Венкатраман объясняет алгоритм, как восстановить пикселизированный номер кредитной карты. Идея проста: сгенерировать все номера кредитных карт, пикселизировать их — и сравнить результат с пикселизированным числом.

Например, мы видим в интернете фотографию чека или банковской карточки с размытым номером. Как видим, здесь для размытия использовался линейный фильтр для блоков 8×8 пикселей:

f0d6acdf2ab4a88bc6614.png

Как восстановить эти цифры?

1. Берём образец чистого бланка.

e52f55a695c009f081499.png

2. Скрипт генерирует картинки для всех номеров.

6892371c386b6fcf563ce.png

3. Размываем каждую картинку по образцу исходного изображения.

ccebfe28e3759b37bdb58.png

4. Определяем вектор яркости каждого изображения. Вектор типа a = [a1, a2... an] содержит значения яркости каждого блока.

57208261c5e18958835c9.png

Здесь номер чека 0000001 соответствует вектору a(0000001)=[213,201,190,...].

Также определяем вектор яркости образца

727e00176a65ec2c45426.png

5. Находим вектор с минимальным расстоянием от исходного (после нормализации).

Константы нормализации:

303b6279bcc1f6970dbfa.png

Вычисление расстояния:

68afcc58def548d3280db.png

Например:

d(0000001) = 1.9363

d(0000002) = 1.9373

...

d(1124587) = 0.12566

d(1124588) = 0.00000

Так находим номер чека: 1124588.

В 2019 году Сомдев Сангван интересный метод восстановления размытых лиц в расследованиях OSINT. Метод такой: разрешение фотографии повышается в «Фотошопе». Оно сначала размывается:

1b84ab6cfb69ccb02eb4a.png


А потом запускается поиск по картинкам «Яндекса» (более продвинутый, чем Google Images). В данном случае «Яндекс» выполняет «брутфорс» лица на изображении:

9f58b9cdf45a1c33290cf.png


Несложно заметить, что у всех описанных методов есть что-то общее. Если не хватает информации, чтобы правильно восстановить изображение, то мы осуществляем пикселизацию аналогичных данных — и проверяем, совпадают ли они.

Это является основой для нашего алгоритма восстановления паролей со скриншотов.

Описание алгоритма для восстановления паролей​

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

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

Здесь довольно простое решение. Берём для ожидаемых символов, вставляем в тот же редактор и делаем скриншот. Данный скриншот используется в качестве подстановочного изображения для аналогичных блоков:

6c7a5cadd92075247c439.png


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

Чтобы поиск сработал, требуется блок с абсолютно такой же конфигурацией пикселей. Например, в тестовом изображении алгоритм не смог найти часть буквы 'o', потому что в сгенерированном изображении этот блок включал ещё и часть следующей буквы, а в исходном изображении было чисто.

195bfee12a8eb3e22e6e0.png


Создание последовательности де Брёйна с пробелами вокруг, очевидно, создаёт ту же проблему, только наоборот: алгоритм не сможет найти правильные блоки, где на край блока попала соседняя буква. Можно сгенерировать изображение со всеми вариантами буквосочетаний, а также с пустыми местами по краям. По такой картинке поиск будет идти дольше, но даст лучшие результаты.

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

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

c39c3d8e58aa259408b3e.png

Исходный код программы Depix .

Кстати, описанная техника перекликается с некоторыми известными криптографическими атаками. Например, это похоже на взлом хэшей, напоминает атаку на блочный шифр ECB и (KPA).

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

c35711ea5bbadfb758232.png
 
Lipoviy777 5 балл(ов) Полезная статья, ранее поверхностно слышал о данной нейросети, очень интересно было почитать подробнее о работе этой штуковины.
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу