- Haar wavelets : 쓸데없는 부분을 0으로 만드는 threshold를 하지 않음
- Daubechies wavelets
- Symlets
- Biorthogonal wavelets : threshold 적용
- 성능면에서는 Biorthogonal이 더 좋지만 수행시간 관점에서는 Haar가 더 빠르다
- Filter 계수
- db1은 Daubechies와 같음
- db1은 필터 계수가 0.71, 즉 루트2에 해당하는 값이 나옴 -> 2개가 존재
- db2는 필터 계수가 4개가 존재
- 예제
- 4가지 인자는 각각 이미지의 값 -> 1scale
- input 이미지와 output 이미지의 값이 같아야 할 수도 있음
- LL1의 이미지를 다시 4등분 할 수 있음 -> 2scale
- 보통 LL쪽의 이미지를 scale한다
- 역방향 wavelet의 경우 4개의 요소들을 한꺼번에 줘야함
- 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 : 고주파 성분을 제거
'영상처리 실습' 카테고리의 다른 글
[Opencv]여러가지 프로세싱 알고리즘 구현 (0) | 2018.12.11 |
---|---|
노이즈 복원&엣지 검출 실습 (0) | 2018.11.20 |