장다양한공간적필터링기법mbm.konkuk.ac.kr/wp-content/uploads/2018/03/디지털... ·...

31
8장 다양한 공간적 필터링 기법 4공간적 필터링 4영상 부드럽게 만들기 4영상 날카롭게 만들기 4잡음 생성 4잡음 제거를 위한 비선형 필터

Transcript of 장다양한공간적필터링기법mbm.konkuk.ac.kr/wp-content/uploads/2018/03/디지털... ·...

8장 다양한 공간적 필터링 기법

4공간적 필터링

4영상 부드럽게 만들기

4영상 날카롭게 만들기

4잡음 생성

4잡음 제거를 위한 비선형 필터

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 2 -

8.1. 공간적 필터링

o 필터링(Filtering)n 영상에서 특정 주파수 성분을 제거하는 작업

o 공간적 필터링(Spatial filtering)n 영상의 픽셀 값을 그대로 이용하여 영상에서 원하는

정보만을 걸러내는 영상 처리 기법

n 마스크(mask)를 이용하는 방법

o 윈도우(window), 템플릿(template), 커널(kernel)

[ ][ ] [ ][ ] [ ][ ]w w

j w i w

g y x m j i f y j x i=- =-

= + +å å

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 3 -

8.1. 공간적 필터링

f[y-1][x-1] f[y-1][x] f[y-1][x+1]

f[y][x-1] f[y][x] f[y][x+1]

f[y+1][x-1] f[y+1][x] f[y+1][x+1]

m[-1][-1] m[-1][0] m[-1][1]

m[0][-1] m[0][0] m0][1]

m[1][-1] m[1][0] m[1][1]

! !

!

!

!!!

!!!

o 3´3 크기의 마스크를 이용한 필터링 방법

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 4 -

8.1. 공간적필터링o 최외곽 픽셀 처리 방법

n 최외곽 픽셀은 마스크 연산에서 제외

n 최외곽 바깥에 가상의 픽셀이 있다고 가정

[0][0] [0][1]

[1][0] [1][1]

[h-2][0] [h-2][1]

[0][w-2]

[1][w-2]

[h-2][w-2]

[h-1][0] [h-1][1] [h-1][w-2]

[0][w-1]

[1][w-1]

[h-2][w-1]

[h-1][w-1]

!!

!!

!! ! ! !

[0][0] [0][1] [0][2]

[1][0] [1][1] [1][2]

[2][0] [2][1] [2][2]

!

!

0

0

0

0 0 00

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 5 -

8.1. 공간적 필터링

o 마스크 연산 시 주의할 점n 일반적으로 원본 영상의 복사본을 만들어 픽셀 값을

참조해야 함.

f[y-1][x-1] f[y-1][x] f[y-1][x+1]

f[y][x-1] f[y][x] f[y][x+1]

f[y+1][x-1] f[y+1][x] f[y+1][x+1]

마스크 연산을 이용하여(x,y) 좌표의 값을 설정할 때, 노란색 부분의 픽셀은 이미원본 영상의 픽셀 값이 변경된 상태임.

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 6 -

8.2. 영상 부드럽게 만들기

o 평균 값 필터(Mean filter)n 영상의 특정 좌표 값을 주변 픽셀들의 그레이스케일 값

들의 산술 평균 값으로 설정하는 필터

1 1 1

1 1 1

1 1 1

19´

125´

1 1 1

1 1 1

1 1 1

1 1 1

1 1 1

1

1

1

1

1

1

1

1

1

1

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 7 -

8.2. 영상 부드럽게 만들기

o 실제 영상에 평균 값 필터를 적용한 결과n 입력 영상, 3x3, 5x5 크기의 마스크를 이용한 결과

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 8 -

8.2. 영상 부드럽게 만들기

o 가중 평균 값 필터(Weighted mean filter)n 평균 값 필터의 일종

n 필터 마스크의 가운데 위치한 픽셀에 가중치를 더 주는방법

1 2 1

2 4 2

1 2 1

116´

1256

´

1 4 6

4 16 24

6 24 36

4 16 24

1 4 6

4

16

24

16

4

1

4

6

4

1

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 9 -

8.2. 영상 부드럽게 만들기

o 실제 영상에 가중 평균 값 필터를 적용한 결과n 입력 영상, 3x3, 5x5 크기의 마스크를 이용한 결과

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 10 -

8.2. 영상 부드럽게 만들기

o 가우시안(Gaussian) 함수n 1차원 가우시안 함수

-4 -3 -2 -1 0 1 2 3 40

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

2

221( )2

x

G x e ss ps

-=

2 2

222

1( , )2

x y

G x y e ss ps

æ ö+-ç ÷ç ÷è ø=

n 2차원 가우시안 함수

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 11 -

8.2. 영상 부드럽게 만들기

o 2차원 가우시안 필터 마스크(s = 1.0)

0.0000 0.0000 0.0000 0.0000 0.0001 0.0000 0.0000 0.0000 0.0000

0.0000 0.0000 0.0002 0.0011 0.0018 0.0011 0.0002 0.0000 0.0000

0.0000 0.0002 0.0029 0. 0131 0.0215 0.0131 0.0029 0.0002 0.0000

0.0000 0.0011 0.0131 0.0585 0.0965 0.0585 0.0131 0.0011 0.0000

0.0001 0.0018 0.0215 0.0965 0.1592 0.0965 0.0215 0.0018 0.0001

0.0000 0.0000 0.0002 0.0011 0.0018 0.0011 0.0002 0.0000 0.0000

0.0000 0.0000 0.0000 0.0000 0.0001 0.0000 0.0000 0.0000 0.0000

0.0000 0.0002 0.0029 0. 0131 0.0215 0.0131 0.0029 0.0002 0.0000

0.0000 0.0011 0.0131 0.0585 0.0965 0.0585 0.0131 0.0011 0.0000

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 12 -

8.2. 영상부드럽게만들기o 1차원 가우시안 함수를 이용하여 2차원 가우시안필터 마스크 만들기

!"

1D 세로방향가우시안

1D 가로방향가우시안

2D 가우시안필터링

!"

!"

1D 세로방향가우시안

1D 가로방향가우시안

2D 가우시안필터링

2 2 2 2

2 2 22 2 22

1 1 1( , )2 2 2

x y x y

G x y e e es s ss ps ps ps

æ ö æ ö æ ö+- - -ç ÷ ç ÷ ç ÷ç ÷ ç ÷ ç ÷è ø è ø è ø= = ´

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 13 -

8.2. 영상 부드럽게 만들기

o 실제 영상에 가우시안 필터를 적용한 결과(차례대로 입력 영상, s = 1.0, 2.0, 3.0, 4.0, 5.0)

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 14 -

8.3. 영상 날카롭게 만들기

o 언샤프 마스크(Unsharp mask) 필터

( , ) ( , ) ( , )( , ) [ ( , ) ( , )]

h x y f x y g x y

f x y f x y f x y

= +

= + -

(a)

(b)

( )f x

x

x

( )f x

(c)

(d)

x

x

( )g x

( )h x

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 15 -

8.3. 영상 날카롭게 만들기

o 언샤프 마스크 필터링 시뮬레이션

3x3 크기의 가중평균 값 필터를 사용하여 부드럽게만든 영상

입력 영상에서가중 평균값 필터결과 영상를 이용하여 뺄셈 연산을한 결과

입력 영상에 뺄셈결과 영상을 더한영상

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 16 -

8.3. 영상 날카롭게 만들기

o 라플라시안(Laplacian) 필터n 영상의 2차 미분을 이용

o 영상의 x 방향으로의 일차 미분

o 영상의 x 방향으로의 이차 미분

( 1) ( )ff x f x

= + -¶

[ ] [ ]2

2 ( 1) ( ) ( ) ( 1)

( 1) ( 1) 2 ( )

ff x f x f x f x

xf x f x f x

¶= + - - - -

¶= + + - -

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 17 -

8.3. 영상날카롭게만들기o 라플라시안 필터

0 1 0

1 -4 1

0 1 0

1 1 1

1 -8 1

1 1 1

[ ]

2 22

2 2

( 1, ) ( 1, ) ( , 1) ( , 1)4 ( , )

f ff

x y

f x y f x y f x y f x y

f x y

¶ ¶Ñ = +

¶ ¶

= + + - + + + -

-

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 18 -

8.3. 영상 날카롭게 만들기

o 실제 영상에 라플라시안 필터를 적용한 결과n 입력 영상, 4방향, 8방향을 고려한 라플라시안 필터링

결과

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 19 -

8.3. 영상날카롭게만들기o 언샤프 마스크 필터 수식 변경

[ ]{ }2( , ) ( , ) ( , )

( , ) ( 1, ) ( 1, ) ( , 1) ( , 1) 4 ( , )

h x y f x y f x y

f x y f x y f x y f x y f x y f x y

= +Ñ

= - + + - + + + - -

0 -1 0

-1 5 -1

0 -1 0

-1 -1 -1

-1 9 -1

-1 -1 -1

( , ) 5 ( , )( 1, ) ( 1, ) ( , 1) ( , 1)

h x y f x yf x y f x y f x y f x y

=- + - - - + - -

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 20 -

8.3. 영상 날카롭게 만들기

o 하이부스트(High-boost filter) 필터

n a = 1 이면 언샤프 마스크 필터와 동일

2( , ) ( , ) ( , )h x y f x y f x ya= +Ñ

a = 1 a = 1.5

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 21 -

8.4. 잡음 생성

o 균일 분포(Uniform distribution)

n 0부터 RAND_MAX 까지의 유사 임의 정수를 생성

n 만약 0부터 1사이의 임의의 실수를 생성하려면,

double r = (double)rand() / RAND_MAX;

n rand 함수의 초기화: srand( (unsigned)time(NULL) );

0 RAND_MAX

kvoid srand(unsigned int seed);int rand( void );

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 22 -

8.4. 잡음 생성

o 정상 분포(normal distribution)n 평균이 0이고, 표준편차가 1인 가우시안 분포

(Gaussian distribution)

n Box-Muller 방법: 균일 분포를 이용

double x1, y1, radius, factor, y1, y2;do {

x1 = 2.0 * rand() / RAND_MAX - 1.0;x2 = 2.0 * rand() / RAND_MAX - 1.0;radius = x1 * x1 + x2 * x2;

} while ( radius < 0.00000001 || radius >= 1.0 );

factor = sqrt( (-2.0 * log(radius)) / radius );y1 = x1 * factor;y2 = x2 * factor;

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 23 -

8.4. 잡음 생성

o 평균이 m 이고, 표준편차가 s 인 가우시안 잡음

o 실제 영상에 가우시안 잡음을 추가한 결과n 입력 영상, s = 10, 30 인 가우시안 잡음을 추가한 결과

double z1 = m + s * y1;double z2 = m + s * y2;

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 24 -

8.4. 잡음 생성

o 소금&후추(Salt&Pepper) 잡음n 입력 영상의 임의의 좌표 픽셀

값을 0 또는 255로 설정하는잡음

o 실제 영상에 소금&후추 잡음을 추가한 결과n 입력 영상, 10%, 30% 의 소금&후추 잡음을 추가한 결과

0 2550 255

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 25 -

8.5. 잡음 제거를 위한 비선형 필터

o 미디언(Median) 필터n 입력 영상의 (x,y) 좌표 주변 픽셀들의 값들을 오름 또는

내림 차순으로 정렬하여 그 중앙에 있는 픽셀 값을 사용

64 102 85

73 142 156

52 82 120

73 142 156 52 82 120 64 102 85

73 142 15652 82 12064 10285

정렬(Sorting)

중간값선택

1차원변환

64 102 85

73 142 156

52 85 120

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 26 -

8.5. 잡음제거를위한비선형필터o 삽입 정렬

n 배열의 맨 첫 번째 원소부터 이미 정렬되어있는 원소들을 순회하면서 데이터가 들어갈 위치를 찾아 삽입하는정렬 알고리즘

2 4 5 3 1

2 4 5 3 1

2 4 5 3 1

2 3 4 5 1

32 4 5 3 1

2 4 5 5 1

2 4 4 5 1

2 3 4 5 1

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 27 -

8.5. 잡음제거를위한비선형필터o 소금&후추 잡음이 포함된 영상에 미디언 필터를적용한 결과

10%

20%

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 28 -

8.5. 잡음 제거를 위한 비선형 필터

o 경계선 보전(Edge-preserving) 잡음 제거n 경계선 정보는 살리고 잡음은 제거

o 비등방성 확산(Anisotropic diffusion) 필터

n div : 발산(divergence) 연산자

n Ñ : 그래디언트(gradient) 연산자

n D = Ñ2 : 라플라시안(Laplacian) 연산자

( ( , , ) ) ( , , )tI div c x y t I c x y t I c I= Ñ = D +Ñ ×Ñ

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 29 -

8.5. 잡음제거를위한비선형필터o 비등방성 확산 수식을 이산 함수 형태로 변환

n 전달 계수 함수

~ ~ 2~

1( )

1N W N W

N W

c g II

K

= Ñ =æ Ñ ö

+ ç ÷è ø

, , 1 , , , 1 ,

, 1, , , 1, ,

( ) ( )( ) ( )

N i j i j i j S i j i j i j

E i j i j i j W i j i j i j

I I I I I II I I I I I

- +

+ -

Ñ = - Ñ = -Ñ = - Ñ = -

[ ]1, ,t ti j i j N N S S E E W WI I c I c I c I c Il+ = + ×Ñ + ×Ñ + ×Ñ + ×Ñ

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 30 -

8.5. 잡음제거를위한비선형필터

0 50 100 150 200 2500

50

100

150

200

250

0 50 100 150 200 2500

50

100

150

200

250

0 50 100 150 200 2500

50

100

150

200

250

원본영상

가우시안필터링

비등방성확산

한빛미디어 영상 처리 프로그래밍 By Visual C++ - 31 -

8.5. 잡음 제거를 위한 비선형 필터

o 실제 영상에 비등방성 확산 필터를 적용한 결과n 입력 영상, 반복 횟수 10, 반복 횟수 30을 적용한 결과