В сети достаточно материалов по методам восстановления резкости изображения (деблюру) с помощью специального математического аппарата. Этот аппарат включает в себя нахождение ядра размытия (ядра предполагаемого «фильтра», применённого к изображению) и проведение операции, обратной свёртке данного ядра с изображением.
Всё это хорошо, но!....
Ничего такого сложного в GIMP нет, особенно нахождение ядра размытия и применение ядер сложной конфигурации. Хотелось бы чего‑нибудь попроще, более известного и понятного, но чтобы можно было понять сам процесс и сделать это не прибегая к сторонним заумным средствам.
Исходя из вышесказанного, сделаем допущение, что наше изображение размыто «Гауссовым размыванием» и более того, радиус данного размытия известен. Довольно «нахальное» предположение, но хочется то по простому.
Для «эксперимента» используем традиционно изображение «Лена»:

И так как это всего лишь "эксперимент" сделаем его "чистым". Применим к изображению "Гауссово размывание" размерами 2,5x2,5:

Именно это изображение (B) попытаемся приблизить к исходному изображению (I), не имея ничего кроме него и "лукаво добытой" инфы, что это именно "Гауссово размывание" и размеры размывания 2,5x2,5. Это конечно сильно отличается от реальной ситуации, когда неизвестен ни тип размытия, ни размер размытия. Но таков уж эксперимент.
Суть итерационного процесса.
Исходный итерационный процесс строится следующим образом:
На 0-ой итерации делается копия-слой нашего изображения (B) и обзывается (I0).
На 1-ой итерации делается копия-слой предыдущей итерации (I0) и применяется "Гауссово размывание" размерами 2,5x2,5, получая новое, ещё более размытое изображение (B1). Делаем слой-копию нашего изображения (B), ставим его верхним и устанавливаем наложение "Извлечение зерна" и сливаем с ещё более размытым изображением (B1), получая "серую разность" (G1). Устанавливаем этой "серой разности" (G1) режим наложения "Извлечение зерна" и сливаем с слой-копией предыдущей итерации (копия I0), получаем изображение текущей итерации (I1),
На i-ой итерации повторяем 1-ую итерацию, используя изображение последней итерации (Ik) вместо (I0).
И вроде бы всё хорошо и просто. На каждой итерации фактически применяется нерезкая маска, только разность в этой маске берётся не от текущего изображения (Ik), а от исходного (B). И в этом цимус. Но!... Такой итерационный процесс медленно сходящийся (уже плохо) и быстро натыкается на ограничение разрядности "серой разности" (для 8ми битных изображений не может разность быть представлена долями целого, а значит в определённый момент эта самая разность обнуляется). Как же быть?! Просто используем более быстро сходящуюся итерацию.
Более быстро сходящаяся итерация:
Для неё потребуется дополнительный нормирующий "серый" слой (G). Получим его, сделав 2 копии нашего изображения (B) и наложив их в режиме "Извлечение зерна":

И теперь сама итерация:
На 1-ой итерации делается копия-слой предыдущей итерации (I0) и применяется "Гауссово размывание" размерами 2,5x2,5, получая новое, ещё более размытое изображение (B1). Делаем слой-копию нашего изображения (B), ставим его верхним и устанавливаем наложение "Извлечение зерна" и сливаем с ещё более размытым изображением (B1), получая "серую разность" (G1). Делаем слой-копию этой серой разности (G1) и накладываем на саму себя в режиме "Умножить". Нормируем результат: делаем слой-копию "серого" слоя (G), ставим его верхним и накладываем в режиме "Делить", получаем нормированную мультиплицированную "серую разность" (G1nm). Устанавливаем этой "серой разности" (G1nm) режим наложения "Извлечение зерна" и сливаем с слой-копией предыдущей итерации (копия I0), получаем изображение текущей итерации (I1),
Такая итерация требует больше действий, но процесс гораздо более сходящийся и меньше влияние округления "серых разностей".
И что же всё "это" даёт?





Вывод.
Удалось ли восстановить данным методом исходное изображение (I)? Ну конечно же нет.
Удалось ли уменьшить размытие и приблизиться к исходному изображению (I)? Да.
Комментарии (19)

DimPal
09.01.2026 13:03А если Filters > Enhance > Sharpen (Unsharp Mask) filter? Так хуже результат?

zvezdochiot Автор
09.01.2026 13:03Вы получите первую итерацию из списка. Первая итерация менее плоха, чем пятая?

DimPal
09.01.2026 13:03Интересненько. Выводы для себя сделал такие: blur разрушает мелкие детали (меньше радиуса размытия), и восстановить их уже не получиться. Предлженный метод хорош (восстановил без паразитных артефактов), но чуда не происходит. Спасибо за эксперимент.

zvezdochiot Автор
09.01.2026 13:03Но! Всё "слегка" хуже, ежели неизвестен размер фильтра размытия (не удалось угадать), или размытие вовсе не Гауссово, а смаз, например.

qiper
09.01.2026 13:03А если бы была бесконечная разрядность цвета, можно восставновить полностью оригинал?

zvezdochiot Автор
09.01.2026 13:03Да кто же его знает. Теоретически это решение нелинейного уравнения методом Ньютона для изображений вида:
B = blur(I, r)
где B - имеющееся изображение, r - предполагаемый радиус размытия, blur - предполагаемый метод размытия, а I - искомое изображение.
Сразу видим два "ньюанса": r и blur - предполагаемые, а не известные.
А так по Ньютону в большинстве случаев решение сходится, но не всегда. Но дробные значения яркостей (как минимум float) потребуют прилично так памяти. И надо же не одно изображение в таком виде хранить: размытое (Bk), "серую разность" (Gk), предыдущую итерацию (Ik-1) и текущую итерацию (Ik).

chnav
09.01.2026 13:03Лет 15 назад мы на форуме обсуждали тему со свёрткой изображения с некоей матрицей для восстановления исходного изображения. Тогда родилась идея - н-р идентифицировать какой-то точечный объект на снимке, который превратился в пятно от нерезкости либо полоску от шевелёнки, и уже по нему составить мвтрицу для свёртки. Шевелёнка была особенно актуальна во времена плёнки и плохом освещении, т.е. фонари в кадре, звёзды...
R0bur
Свободные нейросетевые инструменты GFPGAN и Real-ESRGAN радикально решают проблему восстановления резкости изображения, как минимум в «художественной» области.
zvezdochiot Автор
Это вообще не повод делать из себя "дурачка", который ничего не знает и не умеет. Или повод?
R0bur
Я не вижу сферы применения описанного в этой статье метода повышения резкости изображения. Если для восстановления фотографии, то нейросетевые инструменты дадут результат, сравнимый с оригиналом, ну, может, ещё чуть приукрасят. Если для использования в какой-нибудь автоматизированной системе обработки изображений, то, раз уж упомянут «специальный математический аппарат», хотелось бы увидеть формулы, по которым выполняются преобразования.
zvezdochiot Автор
То есть повод. Ну каждому своё. Я вот не стремлюсь быть "дурачком". Почему? Упомянутые нейросети не с неба упали, их написали не "дурачки". А начинали они с простых и очень понятных вещей, типа этой. Формулы же можете вывести из описания итерации сами, по сути это решение нелинейного уравнения методом Ньютона для изображений.
qiper
Предобработка перед обработкой нейросетями для лучшего результата
guryanov
Как раз ищу какие-то инструменты, чтобы улучшить старые отсканированные фото, побробовал Real-ESRGAN - он просто не работает, то есть он увеличивает размер фото но это всё что он делает, фото получается с замыленными частями, экспозицию увеличивает так, что детали пропадают местами, короче пользы от него 0. А с увеличением размера фотошоп справляется на порядок лучше.
zvezdochiot Автор
По поводу фотошопа: Недавно наткнулся на исследовательскую работу, оформленную кодом: https://github.com/ImageProcessing-ElectronicPublications/imgavir . Имеется и "инструмент" (CLI). Хотелось бы иметь сравнение таки с фотошопом, но последнего никогда не имел, да и не планирую (ось "слегка" не та). Как бы провести сравнение?
DmytroDnipro
Ты токсичный "не дурачок"
zvezdochiot Автор
Нет.
qiper
Нейронка неизбежно добавит то, чего не было в оригинале