Методы деконволюции изображений

Материал из MachineLearning.

Перейти к: навигация, поиск

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

Содержание

Проблема смазанных изображений

Причинами смазанности могут выступать различные факторы:

  1. Движение камеры в процессе съемки изображения;
  2. Cъемка на длинной выдержке, когдасцена сама претерпевает изменения;
  3. Расфокусированность оптики;
  4. Использование широкоугольных объективов;
  5. Атмосферная турбулентность;
  6. Съемка на короткой выдержка, что не позволяет захватить достаточно фотонов;
  7. Рассеянние света в конфокальной микроскопии;

История

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

На практике параметры размытия (ядро) неизвестны, поэтому часто их выбирают из эмпирических соображений, иногда просто подбирая одно из стандартных.

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

Общепринятая модель размытия — свертка


\mathbf{I} = \mathbf{L} \otimes \mathbf{f} + \mathbf{n};

Решение в виде максимизации правдоподобия


p(\mathbf{L}, \mathbf{f} | \mathbf{I}) \propto p(\mathbf{I}|\mathbf{L}, \mathbf{f})
p(\mathbf{L})p(\mathbf{f});

p(\mathbf{I}|\mathbf{L}, \mathbf{f}) =
\prod\limits_{\partial^{*} \in \Theta}
\prod_i
\mathcal{N}(\partial^{*} n_i| 0, \zeta_{\kappa(\partial^{*})}) =
\prod\limits_{\partial^{*} \in \Theta} \prod_i
\mathcal{N}(\partial^{*} I_i| \partial^{*} I_i^{c}, \zeta_{\kappa(\partial^{*})});
\Theta — множество производных (\Theta = (\partial^{0}, \partial_{x},
\partial_{y}, \partial_{xx}, \partial_{xy}, \partial_{yy})), I_i^{c} — i-й пиксель изображения \mathbf{I^{c}} = \mathbf{L} \otimes \mathbf{f}.
Ищем разреженное ядро:

p(\mathbf{f}) = \prod_j e^{-\tau f_j};
Здесь \tau - параметр скорости [движения камеры].
Разложим правдоподобие в произведение локальной и глобальной компонент:

p(\mathbf{L}) = p_g(\mathbf{L})p_l(\mathbf{L});

p_l(\mathbf{L}) = \prod_{i \in \Omega} \mathcal{N} (
\partial_x L_i - \partial_x I_i|0, \sigma_1)
\mathcal{N} (\partial_y L_i - \partial_y I_i|0, \sigma_1);
Здесь за \Omega обозначены точки изображения с локальной дисперсией менее некоторой константы.

E(\mathbf{L}, \mathbf{f}) = -\log p(\mathbf{L}, \mathbf{f}|\mathbf{I});

E(\mathbf{L}, \mathbf{f}) \propto \biggl( \sum\limits_{\partial^{*} \in \Omega}
w_{\kappa(\partial^{*})} \|\partial^{*}\mathbf{L} \otimes \mathbf{f} -
\partial^{*}\mathbf{I} \|_2^2\biggr) +
\lambda_1 \| \Phi (\partial_x \mathbf{L}) + \Phi (\partial_y \mathbf{L})\|_1 + \\
+ \lambda_2 \Bigl( \| \partial_x \mathbf{L} - \partial_x \mathbf{I}\|_2^2
\circ \mathbf{M} + \| \partial_y \mathbf{L} - \partial_y \mathbf{I}\|_2^2 \circ \mathbf{M}
\Bigr)
+ \| \mathbf{f}\|_1;

Алгоритм

Вход: \mathbf{I} — размытое изображение; \mathbf{f} — начальное приближение ядра;
Выход: \mathbf{L} — искомое четкое изображение; \mathbf{f} — исходное ядро размытия;
\mathbf{L} <= \mathbf{I}; // инициализация скрытого изображения наблюдаемым;
оптимизация \mathbf{L} и \mathbf{f}:
повторять
оптимизация \mathbf{L}:
повторять
Обновить \mathbf{\Psi}, минимизируя (2);
Вычислить \mathbf{L} согласно (3);
пока ||\Delta \mathbf{L}||_2 < 1 \prod 10^{-5} и ||\Delta \mathbf{Psi}||_2 < 1 \prod 10^{-5};
Обновить \mathbf{f}, минимизируя (4);
пока ||\Delta \mathbf{f}||_2 < 1 \prod 10^{-5} или максимальное число итераций завершено;

Тут мы видим два итерационных процесса внутренний, чередование вычисления \mathbf{\Psi} и \mathbf{L}, и внешний, вычисление очередного приближения скрытой картинки \mathbf{L} и на его основе уточнение ядра \mathbf{f}.