Program/OPEN_CV

[Open CV] 필터링 _ 블러링 _ 평균값 필터

사막여유 2022. 5. 16. 07:57
728x90

2022.05.16 금일은 블러링 ( 평균값 필터 ) 관한 강의였다.

 

 

평균값 필터란 ?

 - 영상의 특정 좌표값을 주변 픽셀 값들의 산술 평균으로 설정하는 것

 - 픽셀들 간의 그레이스케일 값 변화가 줄어들어 날카로운 에지가 무뎌지고,

   영상에 있는 잡음의 영향이 사라지는 효과가 있다.

 

위와 같이 자기 자신을 포함해 주변부의 픽셀의 개수를 나누어 필터링 해주는 것.

 

실제로 왼쪽 원본 영상보다 오른쪽 3x3 , 5x5크기의 마스크로 평균값 필터를 적용한 영상들이 더욱 부드러워지는 것을

볼 수 있다.

이렇게 필터 결과는 부드러워질 수 있지만 더 많은 연산량이 필요하기 때문에 시간이 더 소요될 수 있다.

 

kernel 의 변수에 np.array ( [[1/9, 1/9, 1/9],

                                    [1/9, 1/9, 1/9],

                                    [1/9, 1/9, 1/9]] , dtype = np.float32 ) 를 정의해준 뒤

 

 * kernel에 작은 행렬은 위와 같이 일일히 입력해줄 수 있지만 Mask의 크기가 커지게 되면

   일일히 입력해주기 힘들기 때문에 행렬 생성 함수 중

   kernel = np.ones( (3,3), dtype = np.float ) / 9. 함수를 사용하여 Mask를 쉽게 만들어 줄 수도 있다.

 

전일 배웠던 cv2.filter2D 함수를 사용해 필터링해준다.

cv2.filter2D ( src, -1 , kernel ) 입력영상과 출력 영상의 Type을 맞추기 위해서 -1을 입력하여

필터를 해줄 수 있다.

 

OpenCV에서는 영상처리에서 많이 사용되고 있는 필터는 따로 함수로 빼놓았기 때문에위 블러링 필터도 filter2D함수를 사용하지 않고 cv2.blur 함수를 사용하여 필터링을 진행할 수 있다.

 

cv2.blur ( src, ksize, dst, anchor, borderType )

ksize ( kernel size ) : 평균값 필터 크기. ( width , height ) 형태의 튜플

결국 위 함수는 아래 이미지와 같은 연산을 한다고 볼 수 있다. 

 

 

 * 평균값 필터 ( Mean Filter ) 는 위 영상 찍는 사람에서의 필터링 결과 영상에서 볼 수 있듯이

   편하기는 하지만 영상의 복잡한 부분이 조금 부자연스러운 형태의 필터링 영상을 얻을 수 있는데

   이는 다음에 배울 가우시안 필터를 사용하면 조금 더 자연스러운 형태의 필터링 영상을 얻을 수 있다.

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

728x90