Восстановление изображения-1
Следующим этапом при выполнении лабораторной работы необходимо попробовать восстановить смазанное изображение при помощи двух методов восстановления: метода Тихонова и метода Винера.
Сперва попробуем восстановить резкость картинки при помощи метода А.Н. Тихонова. Поскольку на Python не удалось ни найти аналога данной функции, ни переписать исходный код функции, то пришлось выполнить данную операцию при помощи MATLAB. В таблице 3 представлен список используемых переменных, а в листинге 3 – программный код разработанной функции.
Таблица 3. Список используемых переменных.
Название |
Тип |
Описание |
Deconvolution |
Функция |
Функция выбора метода восстановления |
img |
Двумерный массив |
Исходное замыленное изображение |
PSF |
Двумерный массив |
Маска искажения изображения |
Noise_level |
Дробное число |
Уровень шума |
method |
Стоковый тип |
Метод восстановления изображения |
J |
Двумерный массив |
Восстановленное изображение |
Листинг 3. Функция восстановления резкости методом Тихонова
% Функция восстановления резкости изображения function J = deconvolution(img, PSF, noise_level, method) img = edgetaper(img, PSF); switch method case "Tihonov" J = deconvreg(img, PSF, [], noise_level); case "Wiener" J = deconvwnr(img, PSF, noise_level); end end noise_power = 0.01; unblured_city = deconvolution(blured_city, PSF, noise_power, 'Tihonov'); |
Далее необходимо восстановить замыленное изображение и оценить результаты. На рисунке 8 показана восстановленная картинка с её спектром, а на рисунке 9 – сравнение результата восстановления четкости.
Рисунок 8 – Восстановление четкости методом Тихонова (noise_level = 0.01)
Рисунок 9 – Оценивание результата восстановления четкости
Из рисунка 9 видно, что четкость у восстановленной картинки значительно выше, чем была у смазанной, однако при детальном анализе данных картинок видно, что у восстановленной возникают «волнообразные» шумы – звоны – вызываемые дискретным преобразованием Фурье. Пример таких шумов представлен на рисунке 10.
Рисунок 10 – Получаемые шумы после восстановления резкости
Если же обратиться к официальной документации к исходной функции [4], то разработчики советуют использовать функцию edgetaper перед восстановлением. Данная функция размывает края исходного изображения, используя функцию распределения точек созданной маски. Однако, даже после применения данной функции звенящие шумы по-прежнему остаются.
Далее попробуем восстановить резкость изображения методом Н. Винера. На языке Python удалось лишь найти аналог, работающий с черно-белыми картинками. С цветными работает лишь MATLAB, поэтому восстановим резкость в данной среде. Листинг разработанной функции был представлен ранее в листинге 3, поэтому необходимо лишь предоставить результаты выполнения данной функции. На рисунке 11 представлена восстановленная картинка с её спектром, а на рисунке 12 – сравнение резкости между смазанной и восстановленной картинками.
Рисунок 11 – Восстановление четкости методом Винера (noise_level = 0.01)
Рисунок 12 – Оценивание результата восстановления
При сравнении результатов восстановления видно, что четкость картинки повысилась по сравнению со смазанной, однако до уровня исходного изображения еще далеко. Если же сравнивать спектры восстановленных изображений, полученных двумя данными способами, то видно, что спектр изображения, полученного методом Винера имеет дополнительные окружности, чего нету у спектра, полученного методом Тихонова.