필터란?
무언가를 걸러 내고 일부만을 통과시키는 장치
영상처리에서 필터링이란 영상에서 원하는 정보만 통과시키고 걸러내는 작업을 뜻한다.
영상의 필터링은 보통 마스크(mask)라 불리는 작은 크기의 행렬을 이용하는데, 이 마스크를 어떻게 설정하는가에 따라 부드럽거나 혹은 날카롭게 만들거나 잡음을 제거하는 등의 영상처리가 가능하다.
마스크 연산
필터링을 하기 위해서 모든 영상의 픽셀 값에 마스크 행렬을 이동시키면서 연산을 진행한다. 연산 방법은 마스크 행렬 원소 값과 같은 위치의 픽셀 값을 서로 곱하여 모두 더하여 고정점(보통 행렬의 정중앙 점)에 설정한다.
f(x, y) : 영상 픽셀 값, m(x, y) : 마스크 행렬의 원소 값, g(x, y) : 마스크 연산 결괏값
ex) g(x, y) = m(0, 0)f(x-1, y-1) + m(0, 1)f(x-1, y) + m(0, 2)f(x-1, y+1)
+ m(1, 0)f(x, y-1) + m(1, 1)f(x, y) + m(1, 2)f(x, y+1)
+ m(2, 0)f(x+1, y-1) + m(2, 1)f(x+1, y) + m(2, 2)f(x+1, y+1)
이때 중요한 것이 영상 가장자리 픽셀 처리이다. 보통 영상 바깥쪽에 가상 픽셀을 만들어 처리하는데 여러 가지 방법이 존재한다.
opencv에선 필터링 수행을 위해 filter2D() 함수를 사용한다.
void cv::filter2D(InputArray src,
OutputArray dst,
int ddepth,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1), # 고정점
double delta = 0, # 필터링 연산 후 추가적으로 더할 값
int borderType = BORDER_DEFAULT) # 가장자리 픽셀 확장 방식
filter2D() 함수
https://docs.opencv.org/3.4/d4/d86/group__imgproc__filter.html#ga27c049795ce870216ddfb366086b5a04
OpenCV: Image Filtering
void cv::bilateralFilter (InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT) Applies the bilateral filter to an image. More... void cv::blur (InputArray src, OutputArray dst, Size ksize, Poin
docs.opencv.org
본 내용은 < OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝(저자 : 황선규) > 내용을 참고하여 작성되었습니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=14722394
OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝
컴퓨터 비전 기초부터 딥러닝 활용까지!컴퓨터 비전은 컴퓨터를 이용하여 정지 영상 또는 동영상으로부터 의미 있는 정보를 추출하는 학문이다. 즉, 사람의 눈과 뇌가 하는 작업을 수학적 알고
book.naver.com
'프로그래밍 > 컴퓨터 비전 with openCV' 카테고리의 다른 글
Mat 클래스 ( 행렬의 복사와 부분 행렬 추출 ) (0) | 2022.03.21 |
---|---|
Mat 클래스 ( 행렬의 생성과 초기화 ) (0) | 2022.03.17 |
Mat 클래스 ( 개요 - Mat 행렬의 깊이, 채널, 타입 ) (0) | 2022.03.17 |
Mat 클래스 ( 개요 - 특징과 멤버 변수 ) (0) | 2022.03.16 |