영상의 픽셀값을 직접 이용하는 필터링 방법
주로 마스크 연산을 이용함(마스크(mask) 커널(kernel))
OpenCV에서는 공간적 필터링 마스크 크기가 커질 경우 속도가 느려지기 때문에 주파수 공간에서의 필터링을 수행함
최외곽도 필터링을 해주기 위해서 가장자리 픽셀을 확장해야 한다.
OpenCV에서는 BORDER_REFLECT_101
이 위 그림과 같은 확장 기능을 가진다.
Border Types 열거형 상수 | 설명 |
---|---|
BORDER_CONSTANT | 상수로 채운다. |
BORDER_REPLICATE | 가장 끝 픽셀과 같은 값으로 채운다. |
BORDER_REFLECT | 가장 끝 픽셀을 한 번 채우고, 대칭으로 채운다. |
BORDER_REFLECT_101 | 위 그림과 같다. |
BORDER_REFLECT101 | BORDER_REFLECT_101 |
BORDER_DEFAULT | BORDER_REFLECT_101 |
copyMakeBorder()
: 영상 가장자리 픽셀을 확장
vodi copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right,
int borderType, const Scalar& value = Scalar());
filter2D()
void filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel,
Point anchor = Point(-1, -1), double delta = 0, int borderType = BORDER_DEFAULT);
ddepth
: 원하는 결과 영상의 깊이를 지정. -1이면 src와 같은 깊이를 사용. (참고)
Input depth(src.depth()) | Output depth (ddepth) |
---|---|
CV_8U | -1/CV_165/CV_32F/CV_64F |
CV_16U/CV_16S | -1/CV_32F/CV_64F |
CV_32F | -1/CV_32F/CV_64F |
CV_64F | -1/CV_64F |
kernel
: 필터 마스크 행렬. 1채널 실수형.
anchor
: 고정점 위치. (-1, -1)이면 필터 중앙을 고정점으로 사용.
delta
: (optional) 추가적으로 더할 값
borderType
: 가장자리 픽셀 처리 방법
엠보싱: 철인의 요철 사이에 종이나 직물, 가죽, 금속판 따위를 끼운 뒤 그 뒷면에서 강하게 압력을 주어 돋을무늬를 만드는 일. 또는 그런 방법.
엠보싱 필터: 입력 영상을 엠보싱 느낌이 나도록 변환하는 필터
적용 결과
마치 광원이 좌측 상단에서 장미꽃을 비추는 것 같은 효과를 준다.
📙 강의 - 강사 황선규