블러(blur)처리와 선명화(sharpening)처리

2024. 3. 11. 22:30머신러닝&딥러닝/영상처리

728x90

블러 처리와 선명화 처리를 위해서는 이미지에 필터를 씌운다. 이번 포스팅에서는 블러 처리와 선명화 처리를 위해 씌워야 하는 필터에 대해 알아보자. 
 

 
위와 같이 DALL.E로 생성한 원본 이미지에 대해, 아래 그림은 오른쪽 절반에는 블러 처리, 왼쪽 절반에는 선명화 처리를 한 것이다.

 
지난 번 포스팅에서 공간 영역(spatial domain)과 주파수 영역(frequency domain)에 관해 알아보았다. https://cascade.tistory.com/41

공간 연산(Spatial Operation)과 영상 보간법(Interpolation)

공간 연산(Spatial Operation)은 세 가지 범주로 나뉜다. 단일 픽셀 연산(Single Pixel Operation) 이웃 연산(Neighborhood Operation) 기하적 공간 변환(Geometrical Spatial Operation) 오늘 포스팅에서는 각 범주의 개념과

cascade.tistory.com

 
공간 영역은 이미지 그 자체로, 각 픽셀의 intensity값이 f(x, y)로 나타나는 영역이었다. Grayscale image의 경우 f(x, y) = 0~255의 값을 가질 것이며, color image의 경우 f(x, y)가 R(x, y), G(x, y), B(x, y)로 나뉠 것이다. 또한, 주파수 영역은 공간 영역을 푸리에 변환(Fourier Transformation)한 것이다. 이미지는 픽셀이라는 이산적인 데이터로 저장되기 때문에, 여기서 적용되는 푸리에 변환은 이산 푸리에 변환(DFT, Discrete Fourier Transform)이다.

공간 영역의 필터(L)과 주파수 영역의 필터(R)

 
어떤 필터가 이미지에 같은 효과를 준다면, 공간 영역과 주파수 영역 중 어느 곳에서 필터를 씌우는 것이 더 좋을까? 공간 영역에서 필터를 씌우는 연산은 convolution이다. 즉, 3x3 혹은 5x5 등 특정 크기의 필터가 고정된 이미지를 휩쓸고 지나가며 픽셀의 값과 필터의 값을 곱한 것을 더하는 것이다. 반면, 주파수 영역에서 필터를 씌우는 연산은 단순한 elementwise multiplication 이다.

공간 영역주파수 영역
convolutionelementwise multiplication

 

 
즉, 필터를 계산하는 연산을 수행한다고 할 때, 공간 영역에서는 한 번의 convolution을 계산하는 것은 더 간단하지만, 이 연산을 이미지 전체 사이즈에 대해 반복해야 하므로 많은 시간이 걸린다. 반면, 주파수 영역에서는 "(1) 푸리에 변환 (2) 곱셈 (3) 역푸리에 변환" 의 세 번의 과정만 거치면 된다. 특히 필터가 복잡해져 공간 영역에서 반복해야 하는 convolution의 계산량이 늘어나면, 곱셈의 위력에 의해 계산이 매우 비효율적이다. 따라서, 주파수 영역에서 필터를 씌우는 것이 일반적이다.
 

주파수 영역

주파수 영역이 직관적으로 어떤 의미를 가질까? 이미지에서 가로 혹은 세로 방향으로 이동했을 때, intensity 차이가 적게 나는 픽셀들 (ex: 하늘) 은 저주파로 이루어진 공간주파수들이 분포한다. 또한, 디테일한 부분이 많이 그려져 있어 높은 선명도를 요구하는 부분 (ex: 숲) 은 고주파로 이루어진 공간주파수들이 분포한다.

 
이미지 전체의 공간주파수 분포를 나타낸 것이 아래와 같은 주파수 영역이다. 가운에 원점에 해당하는 점은 가로/세로 방향 주파수가 모두 0인 점으로, 이미지 전체의 평균 intensity를 나타낸다. 이를 DC term(직류성분)이라고 부른다. 또한, 원점에서 가까울수록 저주파, 멀어질수록 고주파를 나타낸다.

 
즉, 고주파 영역은 이미지에서 선명하고 자세하게 표현되어야 하는 부분을 나타내고, 저주파 영역은 이미지 전체적인 색깔이나 큼직한 요소들을 나타낸다.
 

블러(blur) 처리

블러 처리를 위해서는 주파수 영역의 고주파 영역을 없애고 저주파 영역을 남기면 된다. 이를 위해 Lowpass Filter를 사용하자. Lowpass filter에는 세 가지 종류가 있다.

Ideal Lowpass Filter(ILPF)

 
ILPF는 가장 단순한 lowpass filter로, 주파수가 원점으로부터 특정 거리(D0)이상이면 0으로 깔아버리는 필터이다.

세 가지 종류 중 같은 D0를 사용했을 때 blurring이 가장 극단적으로 나타난다. 그러나, 극단적인 색깔 변화로 인해 사물 주위로 물결 모양으로 얼룩이 생기는 ringing 현상이 나타난다.

 
왜 ILPF를 사용하면 ringing이 나타날까? 주파수 영역에서는 이 필터가 그냥 원통 모양이지만, 역 이산푸리에 변환(IDFT)으로 이 필터를 공간 영역으로 바꿔놓으면 아래와 같이 물결 모양을 나타낸다. 주파수 영역에서 필터의 불연속한 부분은 이러한 물결 모양으로 인한 ringing 현상이 일어나도록 한다.

Gaussian Lowpass Filter(GLPF)

 
GLPF는 원점을 평균으로 하는 정규분포 형태의 분포이다. 여기서 D0값은 표준편차로 설정한다.

 
즉 원점에서 D0만큼 떨어진 곳의 함숫값을 약 60.6%로 낮추는 것이다. 이 필터는 세 가지 필터 중 같은 D0 값에 대해 가장 적은 정도의 blurring을 나타내지만, ILPF와 달리 ringing 현상이 나타나지 않는다.

Butterworth Lowpass Filter(BLPF)

BLPF는 GLPF처럼 매끄러운 연속함수를 필터로 하지만, 아래와 같은 함수를 사용한다.

이는 n값에 상관없이 거리가 D0인 곳에서 함숫값을 50%로 낮추는 것이 된다. 또한, 거리가 D0보다 가까운 곳은 n이 커질수록 손실률이 줄어들지만, D0보다 큰 곳은 n이 커질수록 손실률이 커진다. 같은 D0값에 대해 세 가지 필터 중 중간 정도의 blurring이 생긴다. 또한 GLPF와 마찬가지로 ringing 현상이 생기지 않는다.


선명화(sharpening) 처리

선명화 처리를 위해서는, 이미지 전반적으로 들어가 있는 저주파 영역을 줄이고 선명하고 자세한 부분을 표현하는 고주파 영역을 살려야 한다. 이를 위한 필터는 Highpass filter라고 한다. Highpass filter는 lowpass filter와 마찬가지로 3가지이며, 만드는 방법은 아주 간단하다.

1에서 lowpass filter를 빼기만 하면 된다. 그리고 그 이름도 low를 high로 바꾸어 마찬가지로 부르면 된다.

  1. IHPF(Ideal highpass filter)
  2. GHPF(Gaussian highpass filter)
  3. BHPF(Butterworth highpass filter)

 
이러한 Highpass filter를 이미지에 적용시키면, 사물과 사물의 경계와 같이 intensity가 극적으로 변하는 부분이 남고 색깔이 일정한 부분은 intensity가 줄어든다.

반응형