подходы
Существует много методов деконволюции (а именно, оператор деградации линейный и инвариант времени / пространства).
Все они пытаются разобраться с тем, что во многих случаях проблема плохо сбалансирована.
Лучшие методы - это те, которые добавляют некоторую регуляризацию к модели данных, которые будут восстановлены.
Это могут быть статистические модели (Приоры) или любые знания.
Для изображений хорошей моделью является кусочно-плавный или разреженный градиент.
Но ради ответа будет принят простой параметрический подход: - Минимизация ошибки наименьших квадратов между восстановленными данными в модели и измерениями.
модель
Модель наименьших квадратов проста.
Целевая функция как функция данных определяется как:
f(x)=12∥h∗x−y∥22
Задача оптимизации задается следующим образом:
argminxf(x)=argminx12∥h∗x−y∥22
Где - данные, которые должны быть восстановлены, - Ядро Размытия (в данном случае гауссово), а - набор данных измерений.
Модель предполагает, что измерения даны только для действительной части свертки. А именно, если и то где .xhy
x∈Rnh∈Rky∈Rmm=n−k+1
Это линейная операция в конечном пространстве, поэтому ее можно записать с использованием матричной формы:
argminxf(x)=argminx12∥Hx−y∥22
Где - матрица свертки.H∈Rm×n
Решение
Решение наименьших квадратов дается:
x^=(HTH)−1HTy
Как видно, это требует обращения матрицы.
Способность решить эту проблему адекватно зависит от номера условия оператора которому подчиняется . cond ( H ) = √HTHcond(H)=cond(HTH)−−−−−−−−−−√
Анализ номера условия
Что стоит за этим условным номером?
На это можно ответить с помощью линейной алгебры.
Но более интуитивный, на мой взгляд, подход будет думать об этом в частотной области.
В основном оператор деградации ослабляет энергию, как правило, высокой частоты.
Теперь, поскольку по частоте это в основном поэлементное умножение, можно сказать, что простым способом инвертировать его является поэлементное деление с помощью обратного фильтра.
Ну, это то, что сделано выше.
Проблема возникает в случаях, когда фильтр ослабляет энергию практически до нуля. Тогда у нас есть реальные проблемы ...
Это в основном то, что говорит нам Условное число, насколько сильно некоторые частоты были ослаблены относительно других.
Выше можно увидеть число условий (с использованием единиц [дБ]) как функцию параметра STD фильтра Гаусса.
Как и ожидалось, чем выше STD, тем хуже число условий, так как более высокий STD означает более сильный LPF (значения, снижающиеся в конце, являются числовыми проблемами).
Численное решение
Создан ансамбль Gaussian Blur Kernel.
Параметры: , и .
Данные являются случайными и без шума были добавлены.к = 31 м = 270n=300k=31m=270
В MATLAB была решена линейная система с pinv()
использованием псевдообращения на основе SVD и \
оператора.
Как видно, при использовании SVD решение гораздо менее чувствительно, чем ожидалось.
Почему там ошибка?
Глядя на решение (для самого высокого ЗППП):
Как видно, сигнал восстанавливается очень хорошо, за исключением начала и конца.
Это связано с использованием Valid Convolution, которая мало говорит нам об этих образцах.
Шум
Если бы мы добавили шум, все было бы иначе!
Причина, по которой результаты были хороши раньше, связана с тем, что MATLAB мог обрабатывать DR данных и решать уравнения, даже если они имели большое число условий.
Но большое число условий означает, что обратный фильтр сильно усиливает (чтобы обратить сильное затухание) некоторые частоты.
Когда они содержат шум, это означает, что шум будет усилен, и восстановление будет плохим.
Как можно видеть выше, сейчас реконструкция не будет работать.
Резюме
Если кто-то точно знает Оператор деградации и SNR очень хорош, то будут работать простые методы деконволюции.
Основная проблема деконволюции заключается в том, насколько сильно оператор деградации ослабляет частоты.
Чем больше он ослабевает, тем больше SNR требуется для восстановления (это в основном идея фильтра Винера ).
Частоты, которые были установлены на ноль, не могут быть восстановлены!
На практике для получения стабильных результатов следует добавить несколько априоров.
Код доступен в моем хранилище обработки сигналов StackExchange Q2969 GitHub .