• Haar wavelets : 쓸데없는 부분을 0으로 만드는 threshold를 하지 않음
  • Daubechies wavelets
  • Symlets
  • Biorthogonal wavelets : threshold 적용
  • 성능면에서는 Biorthogonal이 더 좋지만 수행시간 관점에서는 Haar가 더 빠르다
  • Filter 계수

  • db1은 Daubechies와 같음
  • db1은 필터 계수가 0.71, 즉 루트2에 해당하는 값이 나옴 -> 2개가 존재
  • db2는 필터 계수가 4개가 존재
  • 예제
  1. 4가지 인자는 각각 이미지의 값 -> 1scale
  2. input 이미지와 output 이미지의 값이 같아야 할 수도 있음
  3. LL1의 이미지를 다시 4등분 할 수 있음 -> 2scale
  4. 보통 LL쪽의 이미지를 scale한다
  5. 역방향 wavelet의 경우 4개의 요소들을 한꺼번에 줘야함
  6. idwt2애 4개의 요소를 넣은 값을 in_w1에 저장하여 이미지를 확인

  • dwt2의 인자에는 이미지와 어떤 방식으로 주파수 성분들을 나눌지를 넣는다
  • 2차원 DWT 개념 이해

  • Horizontal의 Edge성분이 HL에, vertical의 Edge성분이 LH에 나타난다
  • 즉 HH부분에는 대각선의 Edge성분이 나타난다

 

wavelet을 압축에 이용해 보자

  • wavelet의 LL부분만 사용한다면 4등분된 성분중에 1개만 사용하므로 1/4의 압축이 이루어진다
  • 여기서 다시 한 번 wavelet을 사용한다면 8배의 압축이 이루어지는 것이다
  • HL(Horizontal)과 LH(vertical)값의 제곱의 합의 제곱근으로 edge를 찾을 수 있다
  • 고주파(HH)부분을 적당히 없애준다면 noise제거에도 사용 가능하다

실습

  • haar와 Daubechies의 결과값 비교
    • 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
%% The Daubechies Wavelets
clear; clc;
c=imread('cameraman.tif');
figure, imshow(c);
dwtmode('per');
[LL1, LH1, HL1, HH1] = dwt2(c,'db2');
w1 = [LL1, LH1; HL1, HH1];
figure, imshow(mat2gray(w1));
[LL2, LH2, HL2, HH2] = dwt2(LL1, 'db2');
w2LL = [LL2, LH2; HL2, HH2];
w2 = [w2LL, LH1; HL1, HH1];
figure, imshow(mat2gray(w2));
%% 복구
in_w1LL = idwt2(LL2, LH2, HL2, HH2,'db2'); 
in_w1 = [in_w1LL, LH1; HL1, HH1];
figure, imshow(mat2gray(in_w1));
in_v = idwt2(in_w1LL, LH1, HL1, HH1, 'db2');
figure, imshow(mat2gray(in_v));
%% haar
clear; clc;
c=imread('cameraman.tif');
figure, imshow(c);
dwtmode('per');
[LL1, LH1, HL1, HH1] = dwt2(c,'haar');
w1 = [LL1, LH1; HL1, HH1];
figure, imshow(mat2gray(w1));
[LL2, LH2, HL2, HH2] = dwt2(LL1, 'haar');
w2LL = [LL2, LH2; HL2, HH2];
w2 = [w2LL, LH1; HL1, HH1];
figure, imshow(mat2gray(w2));
%% 복구
in_w1LL = idwt2(LL2, LH2, HL2, HH2,'haar'); 
in_w1 = [in_w1LL, LH1; HL1, HH1];
figure, imshow(mat2gray(in_w1));
in_v = idwt2(in_w1LL, LH1, HL1, HH1, 'haar');
figure, imshow(mat2gray(in_v));
cs
    • haar -> wavelet 1scale -> 2scale

  • haar -> 복구 2scale -> 1scale

  • Daubechies -> 1 scale -> 2 scale

  • Daubechies 복원 -> 2scale -> 1scale

  • PSNR의 경우는 threshlod값에 따라 값이 달라질 수 있다

 

  • DCT 기반 압축에서 Blook artifact현상을 없앨 수 있다 -> 압축률은 DCT가 더 우수
    •  Blook artifact : 나눈 블럭 사이에 경계선이 나타나는 현상

 

  • 1scale 후 LL성분을 0으로 만들고 inverse하면 edge성분만 검출됨

  • denoising : 고주파 성분을 제거

+ Recent posts