영상 필터링(Image Filtering)은 영상에서 필요한 정보만 통과시키고 원치 않는 정보는 걸러내는 작업이다.
필터링 종류
필터링 작동 방법은 크게 두 가지로 나눌 수 있다.
(1) 주파수 공간에서의 필터링 (Frequency domain filtering)
주파수 값을 이용하는 필터링 방법이다.
영상에서 주파수 값을 추출하는 FFT를 거쳐서 추출한 값과 설정한 관심영역을 곱하는 IFFT를 통해 주파수 필터링이 작용한다.
(2) 공간적 필터링(Spatial domain filtering)
영상의 픽셀 값을 직접 이용하는 필터링 방법이다.
대상 좌표의 픽셀 값과 주변 픽셀 값을 동시에 사용한다.
주로 마스크연산을 이용한다. (마스크 = 커널(kernel) = 윈도우(window) = 템플릿(template))
➡️ 공간적 필터링이 주로 이용된다
☑️ 필터링 작동 방법
다양한 모양과 크기의 마스크를 이용한다.
Anchor은 고정점을 의미힌다.
마스크의 형태와 값에 따라 필터의 역할이 결정된다.
- 영상 부드럽게 만들기
- 영상 날카롭게 만들기
- 에지(egge) 검출
- 잡음 제거
(1) 3X3 크기의 마스크를 이용한 공간적 필터링
3X3 마스크에서는 9개의 (마스크 값 X 마스크에 해당하는 픽셀의 값)을 모두 더한 것이 해당 픽셀 값이 됩니다.
(2) 가장자리 픽셀 확장 방법
가장자리 픽셀은 주변 픽셀이 없기 때문에 필터링을 하기가 어렵다. 따라서 최외곽 바깥에 가상의 픽셀이 있다고 가정하여 필터링을 진행한다.
OpenCV 필터링에서 지원하는 가장자리 픽셀 확장 방법은 아래와 같다.
➡️ 주로 BORDER_REFLECT_101 을 이용한다.
✔︎ 기본적인 2D 필터링 - cv2.filter2D
OpenCV에서 제공하는 cv2.filter2D()함수로 기본적인 2D 필터링을 할 수 있다.
import cv2
dst = cv2.filter2D(src, ddepth, kernel, dst=None, anchor=None, delta=None, borderType=None)
- src : 입력 영상
- ddepth : 출력 영상 데이터 타입. (e.g) cv2.CV_8U, cv2.CV_32F, cv2.CV_64F, -1을 지정하면 src와 같은 타입의 dst 영상을 생성합니다.
- kernel: 필터 마스크 행렬. 실수형.
- anchor: 고정점 위치. (-1, -1)이면 필터 중앙을 고정점으로 사용
- delta: 추가적으로 더할 값
- borderType: 가장자리 픽셀 확장 방식
- dst: 출력 영상
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] Filtering : Blurring - 가우시안 필터 Gaussian Filter (0) | 2022.02.01 |
---|---|
[OpenCV with Python] Filtering : 블러링(blurring) - 평균값 필터 (0) | 2022.02.01 |
[OpenCV with Python] 영상처리 : 히스토그램 역투영 (0) | 2022.02.01 |
[OpenCV with Python]영상처리 : 특정 색상 영역 추출 (0) | 2022.02.01 |
[OpenCV with Python] 영상처리 : 히스토그램 평활화 Histogram equalization (0) | 2022.02.01 |