|
Изображение под линзой
Задача примерно такая. Есть изображение. Для простоты квадратное, заранее задан размер. А теперь представляем, что эта картинка была снята на очень фиговую камеру, по центру изображение получилось идеального качества, а по краям - деформированного. Подобный эффект часто наблюдается в старых камерах, когда по краям изображение смазано. Вот такую вот смазанную по краям картинку я и должен получить на входе. А на выходе - изначальное изображение. Или что-то на него похожее. В общем, восстановить рисунок.
Я пишу прогу, которая деформирует изображение. А потом может его восстановить (в теории). Проблема в том, что деформация происходит на УРА, а вот восстановить уже хрен - на выходе получается белый шум.
Последний вариант, который успешно прогоняет картинку в обе стороны, тоже имеет свой недостаток - он не смазывает картинку, а лишь очень сильно затеняет деформируемую зону. Что есть не совсем то, что нужно.
Вот в чем трабл первого варианта. Допустим, у нас есть 4 пикселя:
a
b
c
d
после прогонки алгоритма деформации, на позицию каждого из них записывались следующие значения:
(a+3b+3c+d)/8
(b+2c+d)/4
(c+d)/2
d
(Картинка на входе в формате 256 оттенков серого). Так вот. Как видно, самый первый пиксель претерпевает наибольшее изменение, последний - минимальное. Разумно. Но при таком подходе получаются дробные части. Потом я могу поступить с ними по-разному:
убрать
округлить вверх
округлить по правилам округления
но что бы я ни выбрал, потеря дробных частей делает картинку не восстановимой =(
так вот, собственно, просьба. Есть какие-нибудь известные методы для моей задачи? Или посоветуйте что, я уже месяц парюсь и ничего пока не придумал. В задаче ограничен только своими возможностями и желаниями. Могу работать хоть с цветными, хоть с черно-белыми изображениями.
Заранее спасибо!
Последний раз редактировалось WieRuindl, 28.10.2010 в 03:34.
|