06.08.2013 Views

Всплески (вейвлеты)

Всплески (вейвлеты)

Всплески (вейвлеты)

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!