본문 바로가기
코딩/OpenCV

[C++ opencv] 가우시안 필터 vs 평균 필터, 노이즈제거 승자는?

by DIYver 2020. 6. 30.

본 블로그에서 가우시안 필터와 평균 필터 사용법을 전부 다루었다.

 

그러면서 사용하는 목적이 다르다고 했었고,

 

분명 둘 사이에 시간차이가 있다고 했었다.

 

오늘은 그 차이를 확인해보는 시간을 가져보도록 하겠다.

 

 

 

https://diyver.tistory.com/60

 

[C++ opencv] 평균필터 적용하여 노이즈 제거하기 average filter, filter2d()

본문 목표 영상처리에 있어서 제일 중요한 것들 중 하나는 당연 '노이즈 제거' 이다. 노이즈 제거 방법에는 정말 여러가지가 있지만, 제일 쉬운 방법은 blur 처리를 하는 것이다. blur 처리란 영상��

diyver.tistory.com

[평균 필터 포스트 보러가기]

 

 

 

 

https://diyver.tistory.com/67

 

[C++ opencv] 가우시안 필터로 노이즈 제거하기 gaussian filter, gaussian blur()

본문 목표 영상처리에서 '노이즈 제거'의 중요성은 80%를 차지한다고해도 과언이 아니다. 노이즈 제거의 방법에는 여러가지가 있겠지만, 가장 쉽게 하는 방법은 영상을 흐리게 하는 것이다. 그 ��

diyver.tistory.com

[가우시안 필터 포스트 보러가기]

 

 

 

 

 

 

 

 

 

대결 방법

대결 방법은 간단하다

 

Visual studio 2019 버전 이용,

 

Release 모드를 사용하고, 같은 고해상도 이미지를 각각의 방법으로 blur 처리를 한다.

 

그리고 그 과정에서 소요된 시간을 측정 하고,

 

신뢰도를 높이기 위해서 사진 하나당 10번의 반복 시험을 한다.

 

사진은 고해상도 흑백 이미지로해서 3장을 사용한다.

(그래야 이미지 처리 시간을 확실하게 볼 수 있다.)

 

 

 

 

 

Stage 1.

 

사용할 사진은 아이유 사진이다.

 

 

해상도 : 5120 x 2880

( OpenCV에서 흑백 사진으로 불러와서 동일하게 처리한다.)

 

Gaussian filter 적용, mask 크기 (7,7)
average filter 적용 mask 크기 (7,7)

결과는 위와 같이 나왔다.

 

압도적인 차이로 Gaussian Filter 가 average Filter를 이겨버렸다...

 

다른 Stage 로 가볼 필요가 없어질 정도인거 같다...

 

 

 

 

 

 

Stage 2.

 

사용할 사진은 자동차 사진이다.

 

이번에는 마스크 크기를 49 x 49 으로 해보도록 하겠다.

 

 

해상도 8192x5461

( OpenCV에서 흑백 사진으로 불러와서 동일하게 처리한다. )

 

 

 

원본 이미지_grayscale
Gaussian blur 처리, mask 크기 : (49, 49)
Average Filter 적용, mask 크기 : (49, 49)

 

 

결과는 위와 같이 나왔다.

 

정말 차이가 엄청나게 크게 나는 것을 알 수 있다.

 

가우시안 필터가 평균 필터보다 약 7배 정도 빠른 것을 알 수 있다.

 

mask 크기가 작을 때에는 약 15배 정도 까지 빠른 것은 stage 1 에서 확인할 수 있었다.

 

그리고 사진을 자세히 보면

 

blur 처리된 이미지 두 장 모두, 자글자글한 노이즈가 다 잡힌 것을 확인할 수 있다.

 

그리고 gaussian filter 는 자동차가 더 선명하게 보이고,

 

average filter 는 전체가 다 흐려졌음을 알 수 있다.

 

gaussian filter는 중앙 부에 가중치를 더 주기 때문에 비교적 object(대상물)가 선명하게 남음을 확인할 수 있었다.

 

stage 3 까지 갈 필요도 없겠지만, 그래도 해보도록 한다.

 

 

 

 

 

 

 

 

Stage 3.

 

사용할 사진은 자연 사진이다.

 

이번에는 마스크 크기를 101 x 101 으로 해보도록 하겠다.

 

 

해상도 : 8192 x 3839

( OpenCV에서 흑백 사진으로 불러와서 동일하게 처리한다. )

 

원본 이미지, grayscale
Gaussian Blur, mask 크기 (101, 101)
Average filter, mask 크기 : ( 101, 101)

 

결과는 위와 같이 나왔다.

 

신기하게도 mask 크기를 증가시켰음에도 불구하고 average filter의 소요시간의 변화가

 

stage 2 에서의 결과보다 더 줄어들었다.

 

반대로 gaussian 필터는 기존보다 엄청나게 처리시간이 증가해버렸다.

 

 

 

 

 

 

 

 

 

결론.

필자가 직접 경험한 것을 토대로 결론을 내려보자면

 

Gaussian Filter 는 처리속도가 매우 빠르지만, mask 크기를 증가시키면 처리속도 저하가 생기는 문제가 있다.

 

Average Filter 는 mask 크기가 어떻게 되더라도 처리 속도가 비슷했다. 하지만 처리속도가 비교적 느리다.

 

세세하게 blur 처리가 필요한 것이 아니라면 처리속도가 빠른 Gaussian Filter 를 사용하는 것이 합리적이다.

 

특히, 비디오 영상에서의 연산처리를 한다면 Gaussian Filter를 불가피하게 사용해야 할 것으로 보인다.

 

대신 좀 더 Gaussian Filter를 제대로 사용하려면 상황에 알맞게 시그마(편차) 값을 조절할 필요가 있어보인다.

 

 

 

 

 

 

 

 

도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!

감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^

댓글