1次元ウェーブレット変換フーリエ変換とウェーブレット変換の違い...
TRANSCRIPT
1次元ウェーブレット変換
連続信号から一定間隔でN個の値c0,c1,…,cN-1をサンプルしたとする.ただしNは2のべき乗とする.すなわちサンプル間隔を1とする長さの単位をとり,信号を次の段階関数で近似する.
<≤−
<≤<≤
=
− NxNc
xcxc
f
N 1
2110
1
1
0
)0(
次に,連続する2画素ごとに,値をその平均値で置き換えたものをf (1)(x)とする.
<≤−+=
<≤+=<≤+=
=
−−− NxNccc
xcccxccc
f
NNN 2)2/)(
42)2/)(20)2/)(
12)1(
12/
32)1(
1
10)1(
0
)1(
(
( (
0 4 8
0 8
0 1 2 3 4 5 6 87
0 2 4 6 8
)()0( xf
)()1( xf
)()2( xf
)()3( xf
x
x
x
x
nN 2=
値が一定の区間の幅をスケールと呼ぶ.
スケール1の信号
スケール2
スケール4
スケール8
の例328 ==N1.信号の階層的近似
レベル0
レベル1
レベル0
レベル1
さらに,連続する4画素ごとに同様な平均操作を行ったスケール4の信号をf(2)(x)とする.
以下同様にすると,最終的にf(n)(x)がスケールNの定数関数となる.
<≤−+=
<≤+=<≤+=
=
−−− NxNccc
xcccxccc
f
NNN 4)2/)(
84)2/)(40)2/)(
)1(12/
)1(22/
)2(14/
)1(3
)1(2
)2(1
)1(1
)1(0
)2(0
)2(
(
( (
Nxcccxf nnnn <≤+== −− 0 )2/)(()( )1(1
)1(0
)(1
)(
1.信号の階層的近似(つづき)
0 4 8
0 8
0 1 2 3 4 5 6 87
0 2 4 6 8
)()0( xf
)()1( xf
)()2( xf
)()3( xf
x
x
x
xスケールの逆数を解像度と呼ぶ.
階層的近似:逐次的にさまざまな解像度の信号を作り出すこと.
スケール1
スケール2
スケール4
スケール8
スケール1のもっとも詳細な信号f(0)(x)とその次のスケール2の近似f(1)(x) との差をg(1)(x)とする.
)()()( )1()1()0( xfxgxf +=
2.多重解像度分解
0 2 4 6 8
0 1 2 3 4 5 6 87
0 2 4 6 8
)()0( xf
)()1( xf )()1( xg
平均 差分
2.多重解像度分解
次に,スケール2の近似f(1)(x)とスケール4の近似f(2)(x) との差をg(2)(x)とする.
0 2 4 6 8
0 4 80 4 8
0 1 2 3 4 5 6 87
0 2 4 6 8
)()0( xf
)()1( xf
)()2( xf
)()1( xg
)()2( xg)()()( )2()2()1( xfxgxf +=
)()()( )1()1()0( xfxgxf +=
スケール1のもっとも詳細な信号f(0)(x)とその次のスケール2の近似f(1)(x) との差をg(1)(x)とする.
)()()( )1()1()0( xfxgxf +=
)()()( )()()1( xfxgxf nnn +=−
2.多重解像度分解
)()()( )2()2()1( xfxgxf +=
次に,スケール2の近似f(1)(x)とスケール4の近似f(2)(x) との差をg(2)(x)とする.
)()()( )3()3()2( xfxgxf +=
同様に
最終的に
)()()()(
)()()()()()()(
)()()(
)()()2()1(
)3()3()2()1(
)2()2()1(
)1()1()0(
xfxgxgxg
xfxgxgxgxfxgxg
xfxgxf
nn ++++=
+++=
++=
+=
まとめると
信号を異なるスケールの成分へ分解することを多重解像度分解と呼ぶ.
フーリエ変換とウェーブレット変換の違い
信号を異なるスケールの成分へ分解することを多重解像度分解と呼ぶ.
フーリエ解析との違いフーリエ解析:各成分は正弦波であり,振幅が場所によらず一定
多重解像度分解:各成分の振幅が場所ごとに変化
0 2 4 6 8
0 4 8
0 8
関数f(0)(x)の多重解像度分解
0 4 8
0 8
0 1 2 3 4 5 6 87
0 2 4 6 8
)()0( xf
)()1( xf
)()2( xf
)()3( xf
)()1( xg
)()2( xg
)()3( xg
0 4 8
0 8
0 1 2 3 4 5 6 87
0 2 4 6 8 0 2 4 6 8
0 4 8
0 8
関数f(0)(x)の多重解像度分解
この加算で元にもどる
)()0( xf
)()1( xf
)()2( xf
)()3( xf
)()1( xg
)()2( xg
)()3( xg
0 1 2
0
データck(0),k=1,…,7の多重解像度分解
k
2( )kc
3( )kc
k
0 1 2 3 4 5 6 87
0 1 2 3 4
0( )kc
k
k
1( )kc
これらを基底関数として,重みをつけて合成したものと考えることができる.
ウェーブレット変換(展開)の行列表現
0 1 2 3 4 5 6 87k
=
)3(0
)3(0
)2(1
)2(0
)1(3
)1(2
)1(1
)1(0
)0(
)0(
)0(
)0(
)0(
)0(
)0(
)0(
)7()6()5()4()3()2()1()0(
cddddddd
ffffffff
各列はウェーブレットの基底関数(基底ベクトル)であり、互いに直交している。その波形には局所性があることがわかる。
f(n)(x)のスケーリング関数による表現
kk
N
kk cckxcxf =−=∑
−
=
)0(1
0
)0()0( ,)()( φ
スケーリング関数の定義
台:値が0でない区間(support)
)(xφ
<≤
= その他
0
101)(
xxφ
2 ,)
2()(
)0(12
)0(2)1(
12/
0
)1()1( +−
=
+=−= ∑ kk
k
N
kk
ccckxcxf φ
2,)
4()(
)1(12
)1(2)2(
14/
0
)2()2( +−
=
+=−= ∑ kk
k
N
kk
ccckxcxf φ
)22()
2( kxkx −
=− φφ
x1
1
0
)1( −xφ
2
x1
1
0 2
x1
1
0 2
)2
2( −xφ
スケーリング関数の直交性の確認
区間[0,N)上の関数p(x),q(x)の内積を
と定義し,
∫=N
dxxqxpqp0
)()(),( x1
1
0 2
1
1
0 2)2
()()( kxx jj
k −=φφ
とおくと
' ,0)()(),,( )('0
)()('
)( kkdxxx jk
N jk
jk
jk ≠=∫ φφφφ
が成り立つ。すなわちφは直交系となる。
)(2
)( 0)0(
0 xxx φφφ =
=
)1(12
)( 0)0(
1 −=
−= xxx φφφ
内積は0
差分データg(x)のウェーブレット母関数による表現
ウェーブレット母関数の定義
<≤−
<≤=
その他012/112/101
)( xx
xψ
<≤−+−−<≤−+−
<≤+−<≤+−<≤+−<≤+−
=
−=
−−−
−−−
NxNcccNxNccc
xcccxcccxcccxccc
xfxfxg
NNN
NNN
12/)(122/)(
432/)(322/)(212/)(102/)(
)()()(
)0(1
)0(2
)0(2
)0(1
)0(2
)0(2
)0(3
)0(2
)0(4
)0(3
)0(2
)0(2
)0(1
)0(0
)0(1
)0(1
)0(0
)0(0
)1()0()1(
x1
1
0 21−
)(xψ
x1
1
0 21−
∑−
=
−−
−−
−−−
−−−
−=
<≤−−−−<≤−−
<≤−−<≤−<≤−−<≤−
=
<≤−+−−<≤−+−
<≤+−<≤+−<≤+−<≤+−
=
−=
12/
0
)1(
)0(1
)0(2
)0(1
)0(2
)0(3
)0(2
)0(3
)0(2
)0(1
)0(0
)0(1
)0(0
)0(1
)0(2
)0(2
)0(1
)0(2
)0(2
)0(3
)0(2
)0(4
)0(3
)0(2
)0(2
)0(1
)0(0
)0(1
)0(1
)0(0
)0(0
)1()0()1(
)2(
12/)(122/)(
432/)(322/)(212/)(102/)(
12/)(122/)(
432/)(322/)(212/)(102/)(
)()()(
N
kk
NN
NN
NNN
NNN
kxd
NxNccNxNcc
xccxccxccxcc
NxNcccNxNccc
xcccxcccxcccxccc
xfxfxg
ψ
)(xψ
2
)0(12
)0(2)1( +−
= kkk
ccd
左において
と置いた。
)2)2(()2( kxkx −=− ψψはΨの台を区間[0,2)に広げて2kだけ平行移動したもの。
x1
1
0 21−
)2/(xψ
x1
1
0 21−
∑−
=
−−−
−−−
−=
<≤−+−−<≤−+−
<≤+−<≤+−
=
−=
14/
0
)2(
)1(1
)1(2
)1(1
)1(1
)1(2
)1(2
)1(1
)1(0
)1(1
)1(1
)1(0
)1(0
)2()1()2(
)4(
22/)(242/)(
422/)(202/)(
)()()(
N
kk
NNN
NNN
kxd
NxNcccNxNccc
xcccxccc
xfxfxg
ψ
)(xψ
2
)1(12
)1(2)2( +−
= kkk
ccd
ただし
一般にスケール2jの関数g(j)(x)は次のように書ける。
2
)1(12
)1(2)(
−+
− −=
jk
jkj
kccd
レベルj、場所kのウェーブレットを次のように定義する。
−= kxx j
jk 2
)()( ψψ
係数の計算過程と配列への保存 1次元
11( )d 1
2( )d 1
3( )d1
0( )d1
2( )c 1
3( )c1
0( )c 1
1( )c
00( )c 0
2( )c 0
3( )c 0
4( )c0
1( )c 0
5( )c 0
6( )c 0
7( )c
21( )c 2
0( )d 2
1( )d2
0( )c 1
1( )d 1
2( )d 1
3( )d1
0( )d
30( )d 2
0( )d 2
1( )d3
0( )c 1
1( )d 1
2( )d 1
3( )d1
0( )d
レベル0
レベル1
レベル2
レベル3
そのまま
そのまま
17
ウェーブレット変換
スケーリング関数とウェーブレットの間には直交性がある。
すべてレベルと場所のウェーブレットの間には直交性がある。
元のデータをすべてのウェーブレットと1つのスケーリング関数で表す場合、ウェーブレットの係数の個数は以下のようになる。
)()1( xg4個
2個 )()2( xg
)()3( xg1個
ウェーブレットの係数の個数
)0(c
)1(c
)2(c
)3(c
)1(d
)2(d
)3(d
1
12
122
242221
1
−=
−=
+++=
+++=
−−
=∑
N
NNNN
n
nn
n
jnj
0)()(),( )('0
)()('
)( == ∫ dxxx jk
N jk
jk
jk φψφψ
0)()(),( )'('0
)()'('
)( == ∫ dxxx jk
N jk
jk
jk φψφψ
18
ウェーブレット変換 つづき
ウェーブレット変換
ただし
逆に展開係数は以下のように計算される。
すべてのウェーブレットの展開係数であらわされること。
)()1( xg4個
2個 )()2( xg
)()3( xg1個
)2(c
)1(d
)2(d
)3(d
)0(c
)1(c
)3(c
ウェーブレットの係数の個数
Ndxdxx
dxdxxNN nn
jN jk
jk
j
===
===
∫∫∫∫
00
2)(0
2)(0
2
00
2)(2)(
)(
2)(
φφ
ψψ
)(0
12/
0
)()(
1)()( n
N
k
jk
jk
n
jcxdxf
j
+= ∑∑−
==
ψ
dxxfN
c
dxxxfd
Nn
jk
N
jj
k
)(1
)()(21
0
)(0
)(
0
)(
∫
∫
=
= ψ
19
下降サンプリングと上昇サンプリング
下降サンプリング
)()1( xg
)()2( xg
)()3( xg
)0(c
)1(c
)2(c
)3(c
)1(d
)2(d
)3(d
演算回数
1つの値の計算に加算数が1回、除算が1回要るので、演算は合計4(N-1)回
12
,,0,2
,2
)0(12
)0(2)1(
)0(12
)0(2)1( −=
−=
+= ++ Nkccdccc kk
kkk
k
14
,,0,2
,2
)1(12
)1(2)2(
)1(12
)1(2)2( −=
−=
+= ++ Nkccdccc kk
kkk
k
18
,,0,2
,2
)2(12
)2(2)3(
)2(12
)2(2)3( −=
−=
+= ++ Nkccdccc kk
kkk
k
0,2
,2
)1(12
)1(2)(
)1(12
)1(2)( =
−=
+=
−+
−−+
−
kccdcccnk
nkn
k
nk
nkn
k
:)( の数jkc
1:)( −Nd jk の数
1121222422
21
1−=−=+++=+++= −−
=∑ NNNNN nnn
n
n
jj
20
下降サンプリングと上昇サンプリング
上昇サンプリング
)()1( xg
)()2( xg
)()3( xg
)0(c
)1(c
)2(c
)3(c
)1(d
)2(d
)3(d
演算回数
1つの値の計算に加算数が1回要るので、演算は合計2(N-1)回
,)1()1()0(2 kkk dcc += ,)1()1()0(
12 kkk dcc −=+ 12
,2,1,0 −=Nk
,)2()2()3(2
−−− += nk
nk
nk dcc ,)2()2()3(
12−−−
+ −= nk
nk
nk dcc 3,2,1,0=k
,)1()1()2(2
−−− += nk
nk
nk dcc ,)1()1()2(
12−−−
+ −= nk
nk
nk dcc 1,0=k
,)()()1(2
nk
nk
nk dcc +=− ,)()()1(
12n
kn
knk dcc −=−+ 0=k
)1(2:)( −Nc jk の数
21
画像の場合⇒ピラミッド
階層的近似:逐次的にさまざまな解像度の信号を作り出すこと.
2次元画像の多重解像度分解
2次元ウェーブレット変換
0 0 1 7( ), , ,...,kc k =
0 1 2 3 4 5 6 87
0 1 2 3 4 0 1 2 3 4
0( )kc
k
k
1( )kc
1( )kd
k
1
0 3
( ),,..,
kck =
1
0 3
( ),,..,
kdk =
2次元画像の多重解像度分解
画像の横のラインごとに,1段階の多重解像度分解を実施
水平方向の誤差分
水平方向の平均
2次元画像の多重解像度分解画像の縦のラインごとに,1段階の多重解像度分解を実施
垂直方向の平均
水平方向の平均に対する
垂直方向の誤差分
水平方向の誤差分に対する
HL
L,LH,L
H,HL,H
0 1 2 3 4k
1( )kc
0 1 2 3 4k
1( )kc
・・・
画像の縦のラインごとに,1段階の多重解像度分解を実施
垂直方向の平均
垂直方向の誤差分
以上の操作を繰り返していく.
HL
L,LH,L
H,HL,H
H,L
H,HL,H
そのまま そのまま
2次元画像の多重解像度分解(つづき) 26
ウェーブレット変換の応用
ウェーブレット縮退によるノイズの低減一般的な特徴1.信号の特徴は,少数のウェーブレット展開係数で表現可能である.2.白色ノイズは,すべての展開係数に影響を及ぼす.
処理法絶対値の小さい展開係数をノイズとみなし,絶対値があるしきい値よ
り小さい展開係数を0にして信号の再構成を行うと,信号の特徴を保持したまま,ノイズ成分が減少する.
0 200 400 600 800 1000 1200-20
-15
-10
-5
0
5
10
15
20
0 200 400 600 800 1000 1200-30
-20
-10
0
10
20
30
原信号
ノイズ加算
ウェーブレット縮退によるノイズの低減
)()1( xg
)()2( xg
)()3( xg
)1(d
)2(d
)3(d
ウェーブレットの展開係数が± 内なら0にする
δ
)2(c
)3(c
)0(c
)1(c
実験:フーリエ変換との比較
フーリエ変換
1次元信号をフーリエ変換し、絶対値で閾値以下のフーリエ係数を強制的に0に置き換える。その後、フーリエ逆変換をする。
シミュレーションでは、3段階の閾値でノイズ除去を実施。
ウェーブレット変換
1次元信号をウェーブレット変換し、絶対値で閾値以下のウェーブレット係数を強制的に0に置き換える。その後、ウェーブ逆変換をする。閾値の設定方法として以下が提案されている。
シミュレーションでは、3段階の閾値でノイズ除去を実施。
nT ln2σα・= nはデータ数、 σはノイズの標準偏差 (Donoho, 1995)
= 0.5, 1, 1.5α
デモソフト Denoise_Fourier.m
n = 1024; % 信号のサンプル数 n = 1024L = 10; % 信号の最大展開レベル n = 2^LJ = 9; % J レベルまで展開 (J =< L)threshold =0.02;
t = (1:n)./n;sig = 40.0*sqrt(t.*(1-t)).*sin((2.2*pi)./(t+.08));
% ドップラー信号の生成noise = randn(1,n); % 白色ノイズの生成sdv = std(noise) % ノイズの標準偏差s0 = sig+noise; % 信号にノイズを加える
S0 = fft(s0);S0a = abs(S0)/max(abs(S0));S0 = S0 .* (abs(S0a) >= threshold);s1 = real(ifft(S0));subplot(2,1,1);plot(s0);subplot(2,1,2);
左から続く
figureplot(abs(S0)); % スペクトルを表示
format longmse = sum((s1(:)-sig(:)).^2)/(n*n)format short
デモソフト Denoise.m
n = 1024; % 信号のサンプル数 n = 1024L = 10; % 信号の最大展開レベル n = 2^LJ = 9; % J レベルまで展開 (J =< L)
t = (1:n)./n;sig = 40.0*sqrt(t.*(1-t)).*sin((2.2*pi)./(t+.08));
% ドップラー信号の生成noise = randn(1,n); % 白色ノイズの生成sdv = std(noise) % ノイズの標準偏差s0 = sig+noise; % 信号にノイズを加える
p = [0.482962913145 0.836516303738 ...0.224143868042 -0.129409522551];
% ドベシィの数列 p_k (N=2)
sup = length(p); % 数列の長さq = -( (-1).^(1:sup) ).*p(sup:-1:1) ;
% ドベシィの数列 q_k の生成coef = zeros(1,n); % 展開係数の保持エリアsk = s0; % スケーリング係数の初期値設定
左から続く
% レベル 1 から レベル J までの高速ウェーブレット変換for j = 1:J
[sk,wk] = fwt1d(sk,p,q);% スケーリング係数の 1次元ウェーブレット変換
coef((2^(L-j)+1):(2^(L-j+1))) = wk;% ウェーブレット展開係数の保持
coef(1:(2^(L-j))) = sk; % スケーリング係数の保持end
threshold = sdv*sqrt(2*log(n))% ウェーブレット縮退のためのしきい値
coef = coef .* (abs(coef) >= threshold);% ウェーブレット縮退% 絶対値がしきい値未満の展開係数を 0 にする
% 再構成sk = coef(1:(2^(L-J))); % レベル J のスケーリング係数for j = J:-1:1
wk = coef((2^(L-j)+1):(2^(L-j+1)));% レベル j のウェーブレット展開係数
sk = ifwt1d(sk,wk,p,q);% 1次元ウェーブレット逆変換により、% レベル j のスケーリング係数を求める
end
1 1.5 2 2.5 3 3.5 4 4.5 50.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
2
2.2x 10
-3
MSE
Wavelet
Fourier
閾値を変えるパラメータ
ウェーブレット縮退によるノイズ低減 34
画像圧縮の例(MATLABソースコード) 35
画像圧縮への応用 36
画像圧縮への応用 37
2次元のウェーブレット展開係数 38