영상 처리는 새로운 영상을 얻기 위해 기존 픽셀 값에 어떤 연산을 가해서 새로운 픽셀 값을 얻는 작업이다.
새로운 픽셀 값을 얻을 때 하나의 픽셀 값이 아닌 그 주변 픽셀들의 값을 활용하는 방법을 공간 영역 필터링(spacial domain filtering)라고 합니다. 또한, 블러링(Blurring)이란 기존의 영상을 흐릿하게 만드는 작업을 뜻합니다.
필터(Filter)와 컨볼루션(Convolution)
컨볼루션 연산은 공간 영역 필터링을 위한 핵심 연산 방법 입니다. 블러링 작업을 예로 들어 컨볼루션 연산이 어떻게 진행되는지 보자
공간 영역 필터링은 연산 대상 픽셀과 그 주변 픽셀들을 활용하여 새로운 픽셀 값을 얻는 방법이라 한다.
이때 주변 픽셀을 어느 범위까지 활용할지 그리고 연산은 어떻게 할지를 결정해야 합니다. 이런 역할을 하는 것이 바로 커널(kernel)입니다. 커널널은 윈도(window), 필터(filter), 마스크(mask)라고도 부릅니다.
아래 그림에서 가운데 있는 3 x 3 짜리 행렬이 바로 커널입니다.
위 그림은 3 x 3 커널로 컨볼루션 연산을 하는 예시입니다. 기존 영상에서 픽셀 값 6을 기준으로 주변에 있는 픽셀 값인 3, 0, 1, 2, 1, 4, 2, 2(시계 방향)까지 활용했습니다. 일대일로 대응하는 위치에 있는 커널의 요소와 대응하는 입력 픽셀 값을 곱해서 모두 합한 것을 결과 픽셀 값으로 결정했습니다. 이런 연산을 마지막 픽셀까지 반복하는 것을 컨볼루션 연산이라고 합니다.
가우시안 블러링(Gaussian Blurring)
가우시안 분포를 갖는 커널로 블러링 하는 것을 가우시안 블러링이라고 합니다. 가우시안 분포(gaussian distribution)란 정규 분포(normal distribution)이라고도 하는데, 평균 근처에 몰려 있는 값들의 개수가 많고 평균에서 멀어질수록 그 개수가 적어지는 분포를 말합니다.
가우시안 블러링 커널은 아래와 같이 중앙값이 가장 크고 중앙에서 멀어질수록 그 값이 작아집니다.
첫 번째 커널에서 16으로 나눈 이유는 커널의 모든 요소의 합이 16이기 때문입니다. (1+2+1+2+4+2+1+2+1 = 16) 두 번째 커널도 모든 요소의 합이 256이므로 256으로 나누어준 것입니다. 이런 가우시안 블러링 커널을 적용하면 대상 픽셀에 가까울수록 많은 영향을 주고, 멀어질수록 적은 영향을 주기 때문에 원래의 영상과 비슷하면서도 노이즈를 제거하는 효과가 있습니다.
OpenCV - 17. 필터(Filter)와 컨볼루션(Convolution) 연산, 평균 블러링, 가우시안 블러링, 미디언 블러링,
이번 포스팅부터는 영상 필터에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree
bkshin.tistory.com
OpenCV Python 강좌 - Smoothing(Blurring)
이미지 블러링은 이미지를 로우 패스 필터 커널로 컨벌루션하는 것입니다. 이미지에서 고주파인 노이즈가 흐려지게 됩니다. 이때 같은 고주파인 선도 같이 흐려지게 됩니다. 마지막 업데이트 -
webnautes.tistory.com
blog.naver.com/ledzefflin/220503016163
OpenCV 강의 07-04 Smooth / Blur Images(번역본)
Smooth / Blur Images 어떻게 이미지를 부드럽게 처리하는지 설명(때론 blur라고도 한다) 부드러운처리(...
blog.naver.com
https://www.youtube.com/watch?v=5V_iHjiey2o&list=PLRx0vPvlEmdBx9X5xSgcEk4CEbzEiws8C&index=16
'opencv' 카테고리의 다른 글
캐니엣지 (0) | 2021.04.08 |
---|---|
허프라인 (0) | 2021.04.06 |
캘리브레이션 (0) | 2021.04.05 |
Python Grayscale (0) | 2021.04.04 |
Python OpenCV (0) | 2021.04.04 |