Підходи
Існує багато методів деконволюції (а саме оператор деградації лінійний та інваріантний час / простір).
Усі вони намагаються впоратися з тим, що проблема є болісною в багатьох випадках.
Кращими є методи, які додають деяку регуляризацію до моделі даних, що підлягають відновленню.
Це можуть бути статистичні моделі (Пріори) або будь-які знання.
Для зображень гарною моделлю є штучна гладка або рідкість градієнтів.
Але задля відповіді буде застосовано простий параметричний підхід - -Змінення Помилки найменших квадратів між відновленими даними в моделі до вимірювань.
Модель
Модель з найменшими квадратами проста.
Цільову функцію як функцію даних задають:
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
Як видно, потрібна інверсія матриці.
Здатність адекватно вирішити це залежить від номера умови оператора який підкоряється . HTHcond(H)=cond(HTH)−−−−−−−−−−√
Аналіз номера стану
Що стоїть за цим номером умови?
Можна відповісти на це за допомогою лінійної алгебри.
Але, на мою думку, більш інтуїтивним підходом було б роздуми про це в частотній області.
В основному оператор деградації зменшує енергію, як правило, високої частоти.
Тепер, оскільки за частотою це в основному мультиплікаційне множення елементів, можна сказати, що найпростішим способом його інвертувати є поділ на мудрому елементі за допомогою зворотного фільтра.
Ну, це те, що зроблено вище.
Проблема виникає у випадках, коли фільтр послаблює енергію практично в нуль. Тоді у нас виникають реальні проблеми ...
Це, в основному, те, що говорить нам номер стану, наскільки жорсткі були послаблені одні частоти відносно інших.
Зверху можна було побачити номер стану (використовуючи одиниці [dB]) як функцію параметра STD фільтра Гаусса.
Як і очікувалося, чим вище ЗПСШ, тим гірше число стану, оскільки вища ЗПСШ означає сильніший ФНП (значення, що знижуються в кінці, є числовими питаннями).
Числове рішення
Створений ансамбль ядра Гаусса Розмиття.
Параметри , і .
Дані випадкові і шуму не додано.n=300k=31m=270
У MATLAB лінійна система була вирішена за допомогою pinv()
якої використовується псевдоінверсія на базі SVD та \
оператор.
Як бачимо, за допомогою SVD розчин набагато менш чутливий, як очікувалося.
Чому виникає помилка?
Дивлячись на рішення (для найвищого ІСТ):
Як видно, сигнал відновлюється дуже добре, за винятком початку та кінця.
Це пов’язано з використанням Valid Convolution, що мало говорить про ці зразки.
Шум
Якби ми додали шум, все виглядало б інакше!
Причина, до якої результати були добрі, пов’язана з тим, що MATLAB міг обробляти дані ДР та вирішувати рівняння, хоча вони мали велику кількість умов.
Але велике число умов означає, що зворотний фільтр сильно посилюється (для зворотного сильного ослаблення) деяких частот.
Якщо вони містять шум, це означає, що шум посилиться і відновлення буде поганим.
Як можна було бачити вище, зараз реконструкція не працюватиме.
Підсумок
Якщо ви точно знаєте Оператора деградації і SNR дуже хороший, прості методи деконволюції спрацюють.
Основне питання деконволюції полягає в тому, наскільки сильно Оператор деградації послаблює частоти.
Чим більше воно зменшується, тим більше SNR потрібно для відновлення (це в основному ідея, що стоїть за Фільтром Вінера ).
Частоти, встановлені на нуль, не можна відновити!
На практиці для досягнення стабільних результатів слід додати кілька пріорів.
Код доступний у моєму StackExchange обробці сигналів Q2969 у сховищі GitHub .