본문 바로가기

Python and Data

(CV-3)Noise Reduction 각종 필터(화질구지 살리기 v2)

카테고리는 Python과 Data인데 영상처리만 계속올리는 기분은 좀 기묘하네요. 근데 뭐 이것도 알고있으면 충분히 좋은 내용이니까...ㅎㅎ

 

이번 포스팅에서는 Noise Reduction에 대해 얘기한다. Noise를 줄이는 방향으로 가는 컨셉인데 Denoising/illumination이랑은 다르다고 생각한다. 애초에 잡음을 완전 줄이는게 디지털에서는 불가능하니까 그냥 Reduction이라고 생각하자 다들.

 

Concept - Noise Reduction

 

- 잡음의 파워(Noise signal Power)를 줄이는 방향으로 간다. NP(NP완비에 NP아님) = 0이 되면 노이즈가 파워를 잃게 되겠지만 잡음은 랜덤하므로 0으로 만들 수 없다는 것을 전제로 한다.

 

- 모든 잡음 감소는 각 샘플의 지역 평균을 기반으로 한다. 지역(패치, 필터, 커널 다 동의어로 생각하자)이 커질수록 평균에 대한 분산은 1/n으로 감소한다. 

 

- 중심극한정리에 따라 n->inf면 ˉxN(μ,σ2/n)에 수렴한다.

 

- 이때 가능하면 중심 A의 값은 그대로 두면서 주변 I1~I8에 대한 모든 값은 그대로 두는 것을 목표로 한다

 

Bilateral filter

경계선이 뚜렷하지 않거나 노이즈가 경계 주변에 많을 때 테두리를 살릴 수 있는 방법을 생각해보자.

 

아이디어는 간단하다. "필터가 두개지요? 하나는 Domain 다른하나는 Range Filter지요?"(이정재님을 따라해봤습니다)

Domain filter => 픽셀의 위치를 고려해서 만든 가중치 필터

Range filter => 픽셀의 각각의 색(값, Intensity)를 고려하여 만든 가중치 필터

계산식은 아래와 같다. 각각 c와 s는 공간, 색에 대한 가중치를 뜻하며 각각의 값은 공간 좌표, 색공간에 차이제곱에 반비례한다. 두 공식은 색공간인지 좌표상 공간인지에 따라 값의 차이가 있을 뿐 구조상으로 매우 동일하다.

 

Domain Filter/Range Filter

가중치 함수에 대한 공식은 다음과 같다.

Weight func

우측 그림에서 보면 차이가 커지는 부분에 자글자글한 블러처리가 되는 모습을 볼 수 있다. 

Biliteral filter는 기본적으로 블러가 들어가게 된다.

Gaussian noise and Biilateral filter and result
σ값에 따른 결과의 차이와 그에 대한 이유

Adaptive Bilateral filter

컨셉은 Bilateral filter에서 크게 달라지지 않는다 하지만 필터의 크기를 적응적으로 변화시킨다는데 의의가 있다. 

예를 들자면 바로 위의 그림에서 σ를 필터의 크기라고 한다면, 필터의 크기가 커질수록 주변부를 많이 내포하는 패치크기를 만들수록 블러는 심해지면서 노이즈는 줄어든다. bilateral filter는 기본적으로 local avg를 사용하기 때문이다.

 

Conclusion

Bilateral filter의 기조는 Domain+Range filter의 결합에 있다. 기능은 filter지만 크기를 줄이면 테두리 또한 살릴수있다. 하지만 두 필터의 값을 모두 구해서 더하는 행위를 하는 만큼 값의 계산이 느리다는 단점을 가지고 있다.

또한 필터의 크기가 커지면 테두리를 잃을 수 있으니 적당한 크기의 필터를 사용해야한다는 점에 유의하자.

 

Median filter

중위값 필터다. 확률적으로 딱 가운데 위치하는 값을 커널의 중앙 영역에 넣어주는 행동을 반복할 것이다.

그럼 어떤 일이 일어날까? Salt and pepper noise와 같은 impulsive noise가 화면 전체 혹은 특정 부에 있다고 가정하면

주변부와 확연하게 다른 값을 띌 것이다. 이럴때 Median filter는 드라마틱한 효과를 낼 수 있다.

통계학적 중위값은 검색해보면 나오니까 다들 알아서 공부하시길...

 

미디안 필터의 수학적 정의

mean filter종류는 다 더해서 평균내고 찍으면 끝이지만

median  filter는 중위값을 구하기 위한 sorting이 기본적으로 필요하다.

그래서 median filter는 크기가 커질수록 연산이 증가한다는 특징이 있다.

다양한 형태의 Median filter

 

Impulsive noise/result

Conclusion

전반적인 색상을 바꾸지 않으면서 특이, 국소적 부분에 대한 보정을 진행할 수 있다. 하지만 Bilateral filter와 같은 이유로 커널의 크기가 커지면 주변에 블러가 생긴다는 점을 잊지 말자.

 


지금까지 3개 연속 CV만 올렸는데 영상처리가 재밌으면서도 현타가 올때가 많네요.

이제 DL관련된 부분들을 다시 좀 올려야겠다 생각합니다.

알고리즘도 좀 올리고요. 집에 가고 싶네요...