Всплески (вейвлеты)
Всплески (вейвлеты)
Всплески (вейвлеты)
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Всплески</strong> (<strong>вейвлеты</strong>)<br />
англ. wavelet – небольшая волна, рябь
L2(R)<br />
<br />
(f , g) =<br />
R<br />
f (x)g(x) dx, f = (f , f )<br />
Кратномасштабный анализ (multiresolution analysis)<br />
Последовательность пространств аппроксимации <br />
Vj<br />
• . . . ⊂ V−2 ⊂ V−1 ⊂ V0 ⊂ V1 ⊂ V2 ⊂ . . .<br />
• clos (∪j∈ZVj) = L 2 (R)<br />
• ∩j∈ZVj = {0}<br />
• f (x) ∈ Vj ⇔ f (2x) ∈ Vj+1, j ∈ Z ⇔ f (2jx) ∈ V0<br />
• f ∈ V0 ⇒ f (x − k) ∈ V0, k ∈ Z<br />
(f ∈ Vj ⇒ f (x − 2jk) ∈ Vj, k ∈ Z )<br />
• существует ϕ ∈ V0 такая, что ϕ0,k(x) = ϕ(x − k) <br />
является ОНБ V0<br />
j∈Z<br />
k∈Z
Тогда существует функция ψ такая, что<br />
ψj,k(x) = 2 j/2 ψ(2 j x − k) <br />
j,k∈Z является ОНБ L2 (R) и для всех<br />
f ∈ L 2 (R)<br />
Pj+1f (x) = Pjf (x) + <br />
k∈Z<br />
dj,kψj,k(x), dj,k = (f , ψj,k)<br />
Обозначим через Wj ортогональное дополнение Vj до Vj+1, т. е.<br />
В частности,<br />
Vj ⊕ Wj = Vj+1 и Vj ⊥ Wj.<br />
V0 ⊕ W0 = V1 и V0 ⊥ W0.<br />
V0 = clos <br />
{ϕ0,k}k∈Z , W0 = clos {ψ0,k}k∈Z<br />
ϕ0,k(x) = ϕ(x − k), ψ0,k(x) = ψ(x − k)<br />
ϕj,k(x) = 2 j/2 ϕ(2 j x − k) = 2 j/2 <br />
ϕ 2 j x − k сжатая в 2 j раз и сдвинутая на k<br />
2 j по x<br />
ψj,k(x) = 2 j/2 ψ(2 j x − k)<br />
2 j<br />
,
ϕ(x) = <br />
hk · 2 1/2 ϕ(2x − k) = <br />
hk · ϕ1,k(x)<br />
k<br />
ψ(x) = <br />
gk · ϕ1,k(x) = <br />
k<br />
<br />
<br />
(ϕ, ψ) = hk · ϕ1,k, <br />
k<br />
ℓ<br />
k<br />
k<br />
(−1) k h1−k · ϕ1,k(x), gk = (−1) k h1−k<br />
(−1) ℓ h1−ℓ · ϕ1,ℓ<br />
<br />
= <br />
k<br />
hk(−1) k h1−k<br />
<br />
. . . h−2 h−1 h0 h1 h2 h3 h4<br />
<br />
. . .<br />
. . . h3 −h2 h1 −h0 h−1 −h−2 h−3 . . .<br />
ϕj,k ⊥ ϕj,ℓ, ψj,k ⊥ ψj,ℓ, ϕj,k ⊥ ψj,ℓ, ϕj,k = ψj,k = 1
Пирамидальный алгоритм<br />
Выразим функции на j − 1 слое, через функции на j<br />
с помощью равенства<br />
ϕ(x) = <br />
hk · 2 1/2 ϕ(2x − k) = <br />
hk · ϕ1,k(x)<br />
k<br />
ϕj−1,ℓ(x) = 2 (j−1)/2 ϕ(2 j−1 x − ℓ) =<br />
<br />
(j−1)/2<br />
= 2 hk · 2 1/2 <br />
ϕ 2(2 j−1 <br />
x − ℓ) − k =<br />
= <br />
k<br />
= <br />
k<br />
k<br />
hk · 2 j/2 ϕ<br />
hk · ϕj,2ℓ+k =<br />
<br />
2 j <br />
x − (2ℓ + k) =<br />
ϕj−1,ℓ(x) = <br />
k<br />
<br />
2ℓ + k = k ′<br />
k<br />
ψj−1,ℓ(x) = <br />
k<br />
hk−2ℓ · ϕj,k<br />
gk−2ℓ · ϕj,k<br />
= <br />
k ′<br />
hk ′ −2ℓ · ϕj,k ′
Заготовим<br />
<br />
ϕj,k, ϕj−1,ℓ =<br />
<br />
ϕj,k, ψj−1,ℓ =<br />
<br />
<br />
ϕj,k, <br />
hk ′ −2ℓ · ϕj,k ′<br />
k ′<br />
ϕj,k, <br />
gk ′ −2ℓ · ϕj,k ′<br />
k ′<br />
<br />
<br />
= hk−2ℓ<br />
= gk−2ℓ
Пусть теперь f (x) = <br />
a0,k · ϕ0,k(x) = f0(x).<br />
k<br />
Поскольку V0 = V−1 ⊕ W−1, то f можно разложить по<br />
функциям из V−1 и W−1:<br />
f0 = <br />
a0,k · ϕ0,k = <br />
a1,k · ϕ−1,k + d1,k · ψ−1,k<br />
k<br />
k<br />
a1,ℓ = (f0, ϕ−1,ℓ) = <br />
a0,k(ϕ0,k, ϕ−1,ℓ) =<br />
k<br />
<br />
a0,k · hk−2ℓ<br />
k<br />
d1,ℓ = (f0, ψ−1,ℓ) = <br />
a0,k(ϕ0,k, ψ−1,ℓ) = <br />
a0,k · gk−2ℓ<br />
k<br />
Далее, берем f1 = a1,k · ϕ−1,k = <br />
a2,k · ϕ−2,k + d2,k · ψ−2,k<br />
и находим a2,k, d2,k. . .<br />
k<br />
k
На j-ом шаге имеем<br />
fj = aj,k · ϕ−j,k = <br />
k<br />
= <br />
aj+1,k · ϕ −(j+1),k + dj+1,k · ψ −(j+1),k<br />
aj+1,ℓ = <br />
fj, ϕ−(j+1),ℓ aj,k ϕ−j,k, ϕ−(j+1),ℓ k<br />
dj+1,ℓ = (yj, ψ−(j+1),ℓ) = <br />
aj,k · gk−2ℓ<br />
k<br />
= <br />
k<br />
aj,k · hk−2ℓ<br />
Начав с набора {a0,k}k, получаем на j-ом уровне разложения<br />
наборы<br />
<br />
aj,k – коэффициенты грубого приближения f<br />
k<br />
<br />
– коэффициенты оставшихся деталей<br />
d1,k<br />
k ,. . . , dj,k<br />
k
Обратно, стартуем с некоторого уровня j, на котором имеем<br />
коэффициенты<br />
<br />
aj,k k и <br />
d1,k k , . . . , <br />
dj,k k .<br />
fj−1 = aj−1,k · ϕ −(j−1),k = <br />
aj−1,ℓ = <br />
fj, ϕ−(j−1),ℓ =<br />
= <br />
k<br />
<br />
aj,k ϕ−(j−1),ℓ, ϕ−j,k<br />
= <br />
aj,k · hℓ−2k + dj,k · gℓ−2k<br />
k<br />
k<br />
aj,k · ϕ−j,k + dj,k · ψ−j,k<br />
<br />
+ dj,k ϕ−(j−1),ℓ, ψ−j,k =
Свертка<br />
Есть две последовательности ak и bk.<br />
Их сверткой называется новая последовательность a ∗ b <br />
a ∗ b <br />
ℓ<br />
<br />
= ak · bℓ−k = <br />
aℓ−k · bk = b ∗ a <br />
k<br />
<br />
. . . a−1 a0 a1 a2 a3 a4<br />
<br />
. . .<br />
. . . b1 b0 b−1 b−2 b−3 b−4 . . .<br />
0<br />
<br />
. . . a−1 a0 a1 a2 a3 a4 . . .<br />
<br />
. . . b2 b1 b0 b−1 b−2 b−3 b−4 . . .<br />
1<br />
<br />
. . .<br />
· · ·<br />
a−1 a0 a1<br />
· · ·<br />
a2 a3<br />
· · ·<br />
a4<br />
<br />
. . .<br />
. . . bℓ+1 bℓ bℓ−1 bℓ−2 bℓ−3 bℓ−4 . . .<br />
k<br />
ℓ<br />
ℓ
Запишем разложение и восстановление в терминах свертки<br />
<br />
a ∗ b = ak · bℓ−k.<br />
ℓ<br />
k<br />
Положим hk = h−k, gk = g−k = (−1) kh1−(−k) = (−1) kh1+k Разложение<br />
aj+1,ℓ = <br />
aj,k · hk−2ℓ = <br />
k<br />
k<br />
aj,k ·h2ℓ−k = (aj ∗h)2ℓ<br />
aj+1 = (aj ∗h) ↓<br />
dj+1,ℓ = <br />
aj,k · gk−2ℓ = <br />
aj,k · g2ℓ−k = (aj ∗ g)2ℓ<br />
k<br />
dj+1 = (aj ∗ g) ↓<br />
• Свертка сh и g.<br />
• «Децимация» т. е. удаление из <br />
aj+1,k<br />
нечетных компонент.<br />
k<br />
k и dj+1,k<br />
<br />
k
Восстановление<br />
aj = (. . . , a−1, 0, a0, 0, a1, 0, a2, . . .) = aj ↑<br />
dj = (. . . , d−1, 0, d0, 0, d1, 0, d2, . . .) = dj ↑<br />
aj−1,ℓ = <br />
aj,k · hℓ−2k + dj,k · gℓ−2k = <br />
aj,k · hℓ−k + dj,k · gℓ−k =<br />
k<br />
= aj ∗ h <br />
ℓ + dj ∗ g <br />
ℓ<br />
• Разбавление <br />
aj,k k и <br />
di,k нулями (т. е. построение новых<br />
k<br />
последовательностей с нечетными 0 компонентами и с четными<br />
компонентами, заданными <br />
aj,k k и <br />
di,k k ).<br />
• Свертка с h и g.<br />
h и g – банк фильтров анализа<br />
h и g – банк фильтров синтеза<br />
k
ϕ(x) = <br />
hk · 2 1/2 ϕ(2x − k) = <br />
hk · ϕ1,k(x)<br />
k<br />
ψ(x) = <br />
gk · ϕ1,k(x) = <br />
(ϕ, ψ) = <br />
k<br />
= <br />
ℓ<br />
k<br />
gk = (−1) k h1−k+2s, s ∈ Z<br />
k<br />
k<br />
(−1) k h1−k+2m · ϕ1,k(x),<br />
hk(−1) k h1−k+2s = [−k + s = −ℓ] =<br />
hℓ+s(−1) ℓ+s h1−ℓ+s = (−1)<br />
s <br />
ℓ<br />
hℓ+s(−1) ℓ h1−ℓ+s<br />
. . . h−2+s h−1+s h0+s h1+s h2+s h3+s h4+s . . .<br />
. . . h3+s −h2+s h1+s −h0+s h−1+s −h−2+s h−3+s . . .
h, g – банк фильтров анализа<br />
h, g – банк фильтров синтеза<br />
h = (h0, h1, . . . , hm)<br />
gk = (−1) k h1−k+2s,<br />
hk = h−k,<br />
Пример. m = 3, s = 2<br />
gk = g−k = (−1) k h 1−(−k) = (−1) k h1+k<br />
h : h0 h1 h2 h3<br />
g : h3 −h2 h1 −h0<br />
h : h3 h2 h1 h0<br />
g : −h0 h1 −h2 h3
Вейвлет-преобразование конечной<br />
последовательности<br />
Периодическое продолжение<br />
f0, f1, . . . , fn – исходная последовательность коэффициентов<br />
(сигнал), n = 2 N − 1,<br />
h0,h1, . . . ,hm – фильтр<br />
Периодически продолжим сигнал, период n + 1:<br />
. . . , f0, f1, . . . , fn, f0, f1, . . . , fn, f0, f1, . . . , fn, f0, f1, . . . , fn, . . .<br />
Сворачивая его с фильтром, получим периодическую<br />
последовательность c тем же периодом n + 1:<br />
. . . , a0, a1, . . . , an, a0, a1, . . . , an, a0, a1, . . . , an, a0, a1, . . . , an, . . .<br />
В силу периодичность, достаточно запомнить n + 1 = 2 N<br />
подряд идущих коэффициентов. После прореживания<br />
останется половина коэффициентов, т. е. 2 N−1 .
Матричная форма записи вейвлет-преобразования для периодического<br />
продолжения конечной последовательности длиной 2 N<br />
Разложение<br />
Восстановление<br />
h : h0 h1 h2 h3<br />
g : h3 −h2 h1 −h0<br />
h : h3 h2 h1 h0<br />
g : −h0 h1 −h2 h3<br />
⎡<br />
⎢<br />
⎣<br />
a1,0<br />
a1,1<br />
a1,2<br />
a1,3<br />
d1,0<br />
d1,1<br />
d1,2<br />
d1,3<br />
⎤<br />
<br />
a1<br />
=<br />
d1<br />
⎡<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ = ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎦ ⎣<br />
h0 h1 h2 h3<br />
h0 h1 h2 h3<br />
h0 h1 h2 h3<br />
h2 h3 h0 h1<br />
g0 g1 g2 g3<br />
g0 g1 g2 g3<br />
g0 g1 g2 g3<br />
g2 g3 g0 g1<br />
<br />
h f <br />
,<br />
g<br />
f = h T g T =<br />
−1 h<br />
=<br />
g<br />
<br />
a1<br />
d1<br />
T h<br />
g<br />
⎤ ⎡<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎥ ⎢<br />
⎦ ⎣<br />
= hT <br />
T g<br />
f0,0<br />
f0,1<br />
f0,2<br />
f0,3<br />
f0,4<br />
f0,5<br />
f0,6<br />
f0,7<br />
⎤<br />
⎥<br />
⎦
Характеристики всплесков<br />
• Длина носителя (фильтра)<br />
• Симметрия<br />
• Количество нулевых моментов<br />
• Гладкость (для сжатия наиболее широко используются<br />
базисы, имеющие одну или две непрерывные производные)<br />
• Ортогональность / биортогональность<br />
<br />
µℓ =<br />
R<br />
x ℓ ψ(x) dx ℓ-ый момент<br />
Пусть ψ имеет 3 нулевых момента: µ0 = 0, µ1 = 0, µ2 = 0.<br />
Тогда, если f (x) = f (0) + f ′ (0)x + f ′′ (0)x 2 + o(x 2 ),<br />
то (f , ψ) = (o(x 2 ), ψ).
h, g – банк фильтров анализа<br />
h, g – банк фильтров синтеза (можно менять местами)<br />
Ортогональные всплески<br />
h<br />
{Vj}, Vj ⊕ Wj = Vj+1, Vj ⊥ Wj, Wj ⊥ Wi<br />
hk = h−k,<br />
gk = (−1) k h1−k+2s, s ∈ Z gk = g−k = (−1) k h1+k<br />
Биортогональные всплески<br />
{Vj}, { Vj}, Vj + Wj = Vj+1, Vj + Wj = Vj+1,<br />
Vj ⊥ Wj, Vj ⊥ Wj, Wj ⊥ Wi<br />
Длина фильтра нечетна: hk = h−k (симметр. относительно 0)<br />
Длина фильтра четна: h1+k = h−k (симметр. относительно 1/2)<br />
h<br />
gk = (−1) k h1−k<br />
h<br />
gk = (−1) k h1−k
Примеры банков фильтров<br />
Банк фильтров Хаара<br />
h = 1<br />
√ 2 (1, 1) g = 1<br />
√ 2 (−1, 1)<br />
h = 1<br />
√ 2 (1, 1) g = 1<br />
√ 2 (1, −1)<br />
Целочисленный банк фильтров (5,3)<br />
h0 = 3/4 h±1 = 1/4 h±2 = −1/8<br />
g0 = 1 g±1 = 1/2<br />
h−1 = 1 h−2 = h0 = −1/2<br />
g1 = 3/4 g2 = g0 = −1/4 g−1 = g3 = −1/8<br />
−2 −1 0 1 2<br />
h −1/8 1/4 3/4 1/4 −1/8<br />
g 1/2 1 1/2<br />
h −1/2 1 −1/2<br />
g −1/8 −1/4 3/4 −1/4 −1/8
Банк (9,7)<br />
h0 = +0.602949018236360,<br />
h−1 = h1 = +0.266864118442875, h−2 = h2 = −0.078223266528990,<br />
h−3 = h3 = −0.016864118442875, h−4 = h4 = +0.026748757410810<br />
g−1 = +1.115087052457000, g−2 = g0 = −0.591271763114250,<br />
g−3 = g1 = −0.057543526228500, g−4 = g2 = +0.091271763114250<br />
h0 = +1.115087052457000, h−1 = h1 = +0.591271763114250,<br />
h−2 = h2 = −0.057543526228500, h−3 = h3 = −0.091271763114250<br />
g1 = +0.602949018236360,<br />
g0 = g2 = −0.266864118442875, g−1 = g3 = −0.078223266528990,<br />
g−2 = g4 = +0.016864118442875, g−3 = g5 = +0.026748757410810
<strong>Всплески</strong> Добеши (ортогональные)<br />
Наибольшее число нулевых моментов ψ, совместимое<br />
с длинной носителя<br />
+ наименьшая ассиметрия<br />
«Койфлеты» (ортогональные)<br />
Наибольшее число нулевых моментов ϕ, ψ, совместимое<br />
с длинной носителя<br />
<br />
x ℓ ψ(x) dx = 0, ℓ = 0, . . . , L − 1<br />
<br />
R<br />
R<br />
L – порядок койфлета<br />
x ℓ ϕ(x) dx = 0, ℓ = 1, . . . , L − 1
Двумерное вейвлет-разложение<br />
Одномерное разложение применяется к каждой строке, затем к<br />
каждому столбцу.<br />
В результате получается 4 диапазона: 1LL, 1HL, 1HH, 1HL.<br />
Далее та же процедура применяется к диапазону 1LL.<br />
В результате вновь получается 4 диапазона: 2LL, 2HL, 2HH,<br />
2HL, и т. д.
Пример двумерного всплескового разложения<br />
Исходное изображение Всплесковое разложение до 3 уровня<br />
3LL 3LH<br />
3HL 3HH 2LH<br />
2HL 2HH 1LH<br />
1HL 1HH
Преобразование цветовых пространств<br />
и квантование в JPEG 2000
RGB → YCrCb (сжатие с потерями)<br />
⎡ ⎤<br />
Y<br />
⎡<br />
0.299 0.587 0.114<br />
⎤ ⎡ ⎤<br />
R<br />
⎣Cr<br />
⎦ = ⎣−0.16875<br />
−0.33136 0.5 ⎦ · ⎣G⎦<br />
Cb 0.5 −0.41869 −0.08131 B<br />
⎡ ⎤ ⎡<br />
R<br />
⎣G⎦<br />
= ⎣<br />
B<br />
1 0 1.402<br />
⎤ ⎡ ⎤<br />
Y<br />
1 −0.34413 −0.71414⎦<br />
· ⎣Cr<br />
⎦<br />
1 1.772 0 Cb<br />
RGB → YUV (сжатие без потерь)<br />
<br />
R + 2G + B<br />
Y =<br />
,<br />
4<br />
<br />
U + V<br />
G = Y − ,<br />
4<br />
U = R − G,<br />
R = U + G,<br />
V = B − G<br />
B = V + G
Квантование<br />
Yb(u, v)<br />
qb(u, v)<br />
b – один из диапазонов LL, HL, LH, HH<br />
Yb(u, v) – исходный коэффициент из диапазона b<br />
qb(u, v) – квантованный коэффициент
|Yb(u, v)|<br />
qb(u, v) = sign(Yb(u, v))<br />
∆b = 2 R b−ε b<br />
<br />
1 + µb<br />
211 <br />
Rb – число бит на отсчет (число бит для хранения Yb(u, v))<br />
Для хранения εb отводится 5 бит, для хранения µb – 11 бит<br />
1) (εb, µb) передается для каждого диапазона LL, HL, LH, HH<br />
2) передается одна пара (ε0, µ0), затем применяется формула<br />
∆b<br />
(εb, µb) = (ε0 − N + jb, µ0)<br />
N – общее количество уровней разложения<br />
jb – уровень разложения, соответствующий диапазону b<br />
В этом случае ∆b изменяется на степень двойки в зависимости<br />
от jb.<br />
При сжатии без потерь ∆b = 1 (εb = Rb, µb = 0).
Обратное квантование<br />
Rqb(u, v) – восстановленный коэффициент<br />
0 γ < 1<br />
⎧<br />
⎪⎨ (qb(u, v) + γ)∆b, qb(u, v) > 0,<br />
Rqb(u, v) = (qb(u, v) − γ)∆b,<br />
⎪⎩<br />
0,<br />
qb(u, v) < 0,<br />
иначе<br />
γ = 0.5 восстанавливает значение в средней точке<br />
γ < 0.5 улучшает PSNR восстановленного изображения, если<br />
в разложении количество больших коэффициентов мало<br />
Pекомендуемое значение γ = 0.375
Сравнение JPEG и JPEG2000