Далее речь пойдет о построении оптимальных (адаптивно- оптимальных для функции
f(M)) фильтров. Естественно,
когда речь идет о построении оптимальных фильтров, нужно определить класс функций, среди которых будем искать
оптимальные. Естественно, чем уже этот класс, тем быстрее будет реализована реконструкция -- так, при использовании
фильтров размером
3×3, каждый их фильтров представим в виде линейной комбинации не более девяти функций
"ступенек". При этом, если наложить условие симметрии, то число используемых "ступенек" можно существенно уменьшить.
Пусть
Un линейное многообразие фильтров размером
n. Пусть
{uk}n−1k=0 множество фильтров,
линейная оболочка которых совпадает с
Un. Тогда
∀u∈Un
u(M)=n−1∑k=0αkuk(M).
f(M) функция из пространства
L2, кроме того, дан фиксированный набор точек
{Mk}mk=1 и вес
p(M).
Фильтр
ˆu∈Un будем называть оптимальным для функции
f(M) (при фиксированных точках
{Mk}mk=1, веса
p(M) и класса
Un), если для любых
ck и
∀u∈Un
‖f(⋅)−m∑k=1ˆck(f,ˆu)ˆu(⋅−Mk)‖2≤‖f(⋅)−m∑k=1cku(⋅−Mk)‖2.
Перефразируем эту задачу следующим образом. Пусть
{uk}n−1k=0 множество фильтров, линейная
оболочка которых совпадает с
Un. Нужно найти линейную комбинацию фильтров
{uk}n−1k=0 так,
чтобы в результате получить оптимальный фильтр
ˆu(M), то есть подобрать числа
{βk}n−1k=1 так, чтобы получить фильтр
ˆu(M)=u0(M)+n−1∑k=1βkuk(M),
то есть найти оптимальный фильтр на классе
Un.
Наши дальнейшие построения будут посвящены определению чисел
{βk}n−1k=1.
Пусть
{ˆck(f,u0)}mk=1 домен, полученный оптимальной фильтрацией сдвигами фиксированного
фильтра
u0(M) по системе точек
{Mk}mk=1. Положим далее
fν(M) восстановление
(реконструкция) фильтром
uν(M) по домену
{ˆck(f,u0)}mk=1, то есть
fν(M)=m∑i=1ˆci(f,u0)uν(M−Mi).
Рассмотрим систему линейных уравнений
n−1∑μ=1βμ⟨fν,fμ⟩=⟨f,fν⟩−⟨f0,fν⟩
для всех
ν=1,…,n−1.
Решая эту систему, полагаем
u0(M):=u0(M)+n−1∑μ=1βμuμ(M).
Для нового фильтра
u0(M) вновь по сдвижкам
{Mk}mk=1 проведем оптимальную фильтрацию и найдем
новый домен
{ˆck(f,u0)}mk=1 и продолжим итерацию, пока коэффициенты домена не
стабилизируются. После этого положим
ˆu0(M)=u0(M). Процесс сходится достаточно быстро.
Заметим, что в описанном алгоритме мы не накладываем
никаких условий на фильтр. Если потребовать, чтобы фильтр был симметричным, то качество восстановления, естественно,
несколько ухудшится, но информация о фильтре существенно сократится.
Пусть, теперь даны две системы точек
{Mk}mk=1 и
{Nk}mk=1, а также два множества
фильтров
Un и
Vn. При фиксированных
{Mk}mk=1,
{Nk}mk=1, веса
p(M) и классов
Un,
Um, нужно найти такие
ˆu∈Un и
ˆv∈Vn, что для любых
ck,bk и
∀u∈Un,∀v∈Vn
‖f(⋅)−m∑k=1ˆck(f,ˆu)ˆu(⋅−Mk)−m∑k=1ˆbk(f,ˆv)ˆv(⋅−Nk)‖2≤
‖f(⋅)−m∑k=1cku(⋅−Mk)−m∑k=1bkv(⋅−Nk)‖2.
Пусть
ˆu0∈Un фильтр оптимальный для функции
f(M) (при фиксированных точках
{Mk}mk=1, то есть получен из условий (
9). Для ошибки восстановления
Δf(M)=f(M)−f0(M) найдем оптимальный фильтр
ˆv0∈Vn. Тогда для
ˆu∈Un и
ˆv∈Vn определяемых условиями (
10) будет иметь место соотношение
‖f(⋅)−m∑k=1ˆck(f,ˆu)ˆu(⋅−Mk)−m∑k=1ˆbk(f,ˆv)ˆv(⋅−Nk)‖2≤
‖f(⋅)−m∑k=1ˆck(f,ˆu0)ˆu0(⋅−Mk)−m∑k=1ˆbk(f,ˆv0)ˆv0(⋅−Nk)‖2.
Ввиду того, что левая часть этого неравенства не намного отличается от правой, то можно построить итерационный процесс,
позволяющий получить оптимальные фильтры
ˆu∈Un и
ˆv∈Vn.
Алгоритм выглядит следующим образом.
Используя стартовый фильтр из множества
Un при фиксированных точках
{Mk}mk=1, веса
p(M) и
класса
Un построим оптимальный фильтр
u∗(M) и, соответственно, домен
{ˆck(f,u∗)}mk=1. Реконструкция по полученному фильтру и домену будет иметь вид
f(u∗,M)=m∑i=1ˆci(f,u∗)u∗(M−Mi).
Используя ошибку восстановления
Δf(M)=f(M)−f(u∗,M) в качестве исходных данных, находим оптимальный фильтр
v∗(M) из множества
Un и, соответствующий домен
{ˆck(f,v∗)}mk=1.
Далее, используя
f(M)−f(v∗,M) в качестве исходных данных и стартовый фильтр
u∗(M), получаем новый фильтр
u∗(M) и, соответствующий домен
{ˆck(f,u∗)}mk=1. Повторяя этот процесс, получим пару
оптимальных фильтров
ˆu(M) и
ˆv(M).
В этом случае, наряду с определением оптимальных доменов на каждом уровне итерации заново вычисляются значения
фильтров. В начале последовательно улучшаем, как было показано в предыдущем разделе, коэффициенты
ck и
bk, потом
"поправляем" фильтр
u(M), находим реконструкцию, и по ошибке реконструкции "поправляем" фильтр
v(M) и т.д.
Для трех базисных функций, вначале находим
u∗(M) и
v∗(M), потом по полученной ошибке
находим функцию
w∗(M) и процесс повторяем.
Этот алгоритм легко обобщается на случай произвольного числа базисных функций.
Заметим, что в результате применения этого алгоритма к полной системе базисных функций, получим ошибку восстановления
равную нулю.
Полученный алгоритм устойчив как по ошибке, так и по коэффициентам оптимальных доменов, но сходимость по фильтрам не
устойчива, что говорит о скрытых внутренних связях фильтров внутри одного класса. Другой особенностью формирования
оптимальных фильтров является зависимость скорости сходимости от вида стартового фильтра. В качестве первого
(низкочастотного) фильтра следует брать центрально-симметричный фильтр Гаусса, а вот относительно вида симметрии
остальных фильтров, то об этом сложно судить. Традиционная теория всплесков в этом случае использует зеркально-
квадратурные функции. Однако в этом случае все зеркально- квадратурные базисные функции восстанавливают исходные данные
практически одинаково. В нашей постановке каждая последующая базисная функция принимает меньшее участие в
восстановлении данных, чем предыдущая, что существенно отличается от используемых детерминированных всплесков.
Проиллюстрируем вышесказанное примерами.
Тестовое изображение Lena.
Для тестового рисунка Lena возьмем фильтр Хаара в качестве стартового
u=[000000000000001100001100000000000000],
ошибка фильтрации этим фильтром равна 27692547,0.
После первой итерации получим фильтр
u=[0,0440,0054−0,072−0,0908−0,01790,0386−0,0235−0,02590,06970,09310,0031−0,0237−0,09730,06970,4840,51420,1157−0,0874−0,0880,11570,51810,48360,0684−0,0966−0,02450,00390,09610,0673−0,0283−0,0210,0376−0,017−0,0887−0,07470,00360,0457],
ошибка фильтрации которым равна 13134435.
Пятая итерация приведет к фильтру
u=[0,0343−0,0119−0,0573−0,0767−0,03210,0324−0,0305−0,04010,07420,10090,0002−0,0246−0,07460,10310,43870,47040,1542−0,0627−0,06170,15760,47510,43590,0997−0,0742−0,02510,00160,10350,0703−0,0416−0,02650,0306−0,0321−0,0747−0,0601−0,01260,037],
ошибка фильтрации которым равна 12463387.
Двадцатая итерация дает фильтр
u=[0,0042−0,0351−0,0441−0,0479−0,03590,0066−0,0431−0,03690,06240,0840,0092−0,0226−0,00910,15130,37390,38620,18460,00770,01530,19830,3930,36310,1395−0,0101−0,020,01010,0810,0567−0,0339−0,03510,0045−0,0403−0,0502−0,0435−0,02960,009],
дающий ошибку фильтрации 1193178.
Приведем в качестве примера полную систему оптимальных непересекающихся фильтров для каждой цветовой компоненты
тестового изображения Lena.
Для компоненты Red полная система оптимальных четырехполосных фильтров имеет вид
u0R=[0,00670,07510,07340,01240,13110,29560,28040,10610,16550,32040,25550,09310,03570,10670,0535−0,0079],
u1R=[−0,9439−0,28580,838−0,38910,51880,93382,2864−0,0711−2,4294−1,71920,4694−0,9228−0,68530,18310,92790,7125],
u2R=[−0,37530,23950,02790,08150,05511,121−0,5542−0,025−0,14520,1464−0,2380,1437−0,0806−0,02210,1039−0,2341],
u3R=[0,0995−0,0854−0,13110,3194−0,28240,2691−0,4750,170,3369−0,18340,8283−0,7653−0,15540,1689−0,10510,3738].
Для компоненты Green полная система оптимальных четырехполосных фильтров имеет вид
u0G=[0,01020,07270,09330,03620,09240,25080,27460,11820,13130,28610,26860,10840,05370,11820,08230,0159],
u1G=[0,2533−0,77580,8652−0,52770,9539−0,37391,9352−0,6654−0,5798−1,64291,0226−0,78230,041−0,62350,447−0,0384],
u2G=[−0,40640,03520,1164−0,06840,30461,15860,0993−0,031−0,1368−0,0079−0,06060,0317−0,0621−0,03140,0930,0247],
u3G=[0,1203−0,0223−0,19710,1383−0,11960,3729−0,03640,08890,25330,0990,9036−0,4958−0,14030,0845−0,17470,2263],
и, наконец, для Blue
u0B=[0,00460,04670,09280,04720,07820,23980,28850,12610,1280,30710,27660,10160,05120,12610,08390,0103],
u1B=[0,2816−0,59540,6991−0,32530,4366−0,54991,4833−0,4309−0,0143−0,94920,9337−0,44060,2656−0,42880,105−0,0921],
u2B=[−0,3882−0,07910,2369−0,09810,26070,99080,37630,0716−0,20320,00230,23440,02180,00620,072−0,0009−0,0157],
u3B=[0,02960,0855−0,25930,1418−0,19910,42450,1370,08290,27370,10230,8866−0,3345−0,14480,084−0,28740,252].