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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Викификация и мелочи)
Строка 1: Строка 1:
 +
{{Задание|Tikhonov_Andrey|Павел Воронин| 30 апреля 2011}}
 +
{{UnderConstruction|[[Участник:Tikhonov Andrey|Tikhonov Andrey]] 00:10, 17 марта 2011 (MSK)}}
 +
Одной из важных задач обработки изображений является задача восстановления
Одной из важных задач обработки изображений является задача восстановления
смазанных снимков. В данной студенческой работе ведется попытка реализовать
смазанных снимков. В данной студенческой работе ведется попытка реализовать
осветить современные подходы к решению этой проблемы и постараться
осветить современные подходы к решению этой проблемы и постараться
-
реализовать и улучшить один из лучших известных алгоритмов.
+
реализовать и улучшить [[Методы деконволюции изображений#Алгоритм|один из лучших известных алгоритмов]].
== Проблема смазанных изображений ==
== Проблема смазанных изображений ==
-
 
+
Причинами смазанности могут выступать различные факторы:<br />
-
Причинами смазанности могут выступать различные факторы:
+
# Движение камеры в процессе съемки изображения;<br />
-
 
+
# Cъемка на длинной выдержке, когдасцена сама претерпевает изменения;<br />
-
1) Движение камеры в процессе съемки изображения;
+
# Расфокусированность оптики;<br />
-
 
+
# Использование широкоугольных объективов;<br />
-
2) Cъемка на длинной выдержке, когдасцена сама претерпевает изменения;
+
# Атмосферная турбулентность;<br />
-
 
+
# Съемка на короткой выдержка, что не позволяет захватить достаточно фотонов;<br />
-
3) Расфокусированность оптики;
+
# Рассеянние света в конфокальной микроскопии;<br />
-
 
+
-
4) Использование широкоугольных объективов;
+
-
 
+
-
5) Атмосферная турбулентность;
+
-
 
+
-
6) Съемка на короткой выдержка, что не позволяет захватить достаточно фотонов;
+
-
 
+
-
7) Рассеянние света в конфокальной микроскопии;
+
-
 
+
== История ==
== История ==
Строка 52: Строка 46:
p(\mathbf{L})p(\mathbf{f});
p(\mathbf{L})p(\mathbf{f});
</tex>
</tex>
-
 
+
<br />
<tex>
<tex>
p(\mathbf{I}|\mathbf{L}, \mathbf{f}) =
p(\mathbf{I}|\mathbf{L}, \mathbf{f}) =
Строка 61: Строка 55:
\mathcal{N}(\partial^{*} I_i| \partial^{*} I_i^{c}, \zeta_{\kappa(\partial^{*})});
\mathcal{N}(\partial^{*} I_i| \partial^{*} I_i^{c}, \zeta_{\kappa(\partial^{*})});
</tex>
</tex>
-
 
+
<br />
<tex>\Theta</tex> — множество производных (<tex>\Theta = (\partial^{0}, \partial_{x},
<tex>\Theta</tex> — множество производных (<tex>\Theta = (\partial^{0}, \partial_{x},
\partial_{y}, \partial_{xx}, \partial_{xy}, \partial_{yy})</tex>),
\partial_{y}, \partial_{xx}, \partial_{xy}, \partial_{yy})</tex>),
<tex>I_i^{c}</tex> — i-й пиксель изображения <tex>\mathbf{I^{c}} = \mathbf{L} \otimes \mathbf{f}</tex>.
<tex>I_i^{c}</tex> — i-й пиксель изображения <tex>\mathbf{I^{c}} = \mathbf{L} \otimes \mathbf{f}</tex>.
-
 
+
<br />
Ищем разреженное ядро:
Ищем разреженное ядро:
-
 
+
<br />
<tex>
<tex>
p(\mathbf{f}) = \prod_j e^{-\tau f_j};
p(\mathbf{f}) = \prod_j e^{-\tau f_j};
</tex>
</tex>
-
 
+
<br />
Здесь <tex>\tau</tex> - параметр скорости [движения камеры].
Здесь <tex>\tau</tex> - параметр скорости [движения камеры].
-
 
+
<br />
Разложим правдоподобие в произведение локальной и глобальной компонент:
Разложим правдоподобие в произведение локальной и глобальной компонент:
-
 
+
<br />
<tex>
<tex>
p(\mathbf{L}) = p_g(\mathbf{L})p_l(\mathbf{L});
p(\mathbf{L}) = p_g(\mathbf{L})p_l(\mathbf{L});
</tex>
</tex>
-
 
+
<br />
-
 
+
<tex>
<tex>
p_l(\mathbf{L}) = \prod_{i \in \Omega} \mathcal{N} (
p_l(\mathbf{L}) = \prod_{i \in \Omega} \mathcal{N} (
Строка 86: Строка 79:
\mathcal{N} (\partial_y L_i - \partial_y I_i|0, \sigma_1);
\mathcal{N} (\partial_y L_i - \partial_y I_i|0, \sigma_1);
</tex>
</tex>
-
 
+
<br />
Здесь за <tex>\Omega</tex> обозначены точки
Здесь за <tex>\Omega</tex> обозначены точки
изображения с локальной дисперсией менее некоторой константы.
изображения с локальной дисперсией менее некоторой константы.
-
 
+
<br />
<tex>
<tex>
E(\mathbf{L}, \mathbf{f}) = -\log p(\mathbf{L}, \mathbf{f}|\mathbf{I});
E(\mathbf{L}, \mathbf{f}) = -\log p(\mathbf{L}, \mathbf{f}|\mathbf{I});
</tex>
</tex>
-
 
+
<br />
<tex>
<tex>
E(\mathbf{L}, \mathbf{f}) \propto \biggl( \sum\limits_{\partial^{*} \in \Omega}
E(\mathbf{L}, \mathbf{f}) \propto \biggl( \sum\limits_{\partial^{*} \in \Omega}
Строка 104: Строка 97:
+ \| \mathbf{f}\|_1;
+ \| \mathbf{f}\|_1;
</tex>
</tex>
 +
<br />
 +
== Алгоритм ==
-
 
-
== Алгоритм ==
 
'''Вход''': <tex>\mathbf{I}</tex> — размытое изображение; <tex>\mathbf{f}</tex> — начальное приближение ядра;
'''Вход''': <tex>\mathbf{I}</tex> — размытое изображение; <tex>\mathbf{f}</tex> — начальное приближение ядра;
-
 
+
<br />
'''Выход''': <tex>\mathbf{L}</tex> — искомое четкое изображение; <tex>\mathbf{f}</tex> — исходное ядро размытия;
'''Выход''': <tex>\mathbf{L}</tex> — искомое четкое изображение; <tex>\mathbf{f}</tex> — исходное ядро размытия;
-
 
+
<br />
-
<tex>\mathbf{L}</tex> <= <tex>\mathbf{I}</tex>; // инициализация скрытого изображения наблюдаемым;
+
<tex>\mathbf{L}</tex> <= <tex>\mathbf{I}</tex>; ''// инициализация скрытого изображения наблюдаемым;''
-
 
+
<br />
оптимизация <tex>\mathbf{L}</tex> и <tex>\mathbf{f}</tex>:
оптимизация <tex>\mathbf{L}</tex> и <tex>\mathbf{f}</tex>:
-
 
+
<br />
'''повторять'''
'''повторять'''
-
 
+
<br />
оптимизация <tex>\mathbf{L}</tex>:
оптимизация <tex>\mathbf{L}</tex>:
-
 
+
<br />
'''повторять'''
'''повторять'''
-
 
+
<br />
Обновить <tex>\mathbf{\Psi}</tex>, минимизируя (2);
Обновить <tex>\mathbf{\Psi}</tex>, минимизируя (2);
-
 
+
<br />
Вычислить <tex>\mathbf{L}</tex> согласно (3);
Вычислить <tex>\mathbf{L}</tex> согласно (3);
-
 
+
<br />
'''пока''' <tex>||\Delta \mathbf{L}||_2 < 1 \prod 10^{-5}</tex> и <tex>||\Delta \mathbf{Psi}||_2 < 1 \prod 10^{-5}</tex>;
'''пока''' <tex>||\Delta \mathbf{L}||_2 < 1 \prod 10^{-5}</tex> и <tex>||\Delta \mathbf{Psi}||_2 < 1 \prod 10^{-5}</tex>;
-
 
+
<br />
Обновить <tex>\mathbf{f}</tex>, минимизируя (4);
Обновить <tex>\mathbf{f}</tex>, минимизируя (4);
-
 
+
<br />
'''пока''' <tex>||\Delta \mathbf{f}||_2 < 1 \prod 10^{-5}</tex> или максимальное число итераций завершено;
'''пока''' <tex>||\Delta \mathbf{f}||_2 < 1 \prod 10^{-5}</tex> или максимальное число итераций завершено;
 +
<br />
Тут мы видим два итерационных процесса внутренний, чередование вычисления
Тут мы видим два итерационных процесса внутренний, чередование вычисления
Строка 136: Строка 130:
картинки <tex>\mathbf{L}</tex>
картинки <tex>\mathbf{L}</tex>
и на его основе уточнение ядра <tex>\mathbf{f}</tex>.
и на его основе уточнение ядра <tex>\mathbf{f}</tex>.
-
 
-
{{Задание|Tikhonov_Andrey|Павел Воронин| 30 апреля 2011}}
 

Версия 21:10, 16 марта 2011

Данная статья является непроверенным учебным заданием.
Студент: Участник:Tikhonov_Andrey
Преподаватель: Участник:Павел Воронин
Срок: 30 апреля 2011

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

См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе.


Статья в настоящий момент дорабатывается.
Tikhonov Andrey 00:10, 17 марта 2011 (MSK)


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

Содержание

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

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

  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}.

Личные инструменты