[OpenCV] 영상의 필터링

zzwon1212·2023년 10월 29일
0

OpenCV

목록 보기
12/16
post-thumbnail

1. 영상의 필터링

  • 영상에서 필요한 정보만 통과시키고 원치 않는 정보는 걸러내는 작업
  • 블러링, 샤프닝, 잡음 제거, 에지 검출 등
  • 종류
    • 주파수 공간에서의 필터링(frequency domain filtering)
      푸리에 변환(Fourier transform)을 이용하여 영상을 주파수 공간으로 변환하여 필터링을 수행하는 방법
    • 공간적 필터링(spatial domain filtering)

2. 공간적 필터링

  • 영상의 픽셀값을 직접 이용하는 필터링 방법

    • 대상 좌표의 픽셀 값과 주변 픽셀값을 동시에 사용
  • 주로 마스크 연산을 이용함(마스크(mask) \approx 커널(kernel))

  • OpenCV에서는 공간적 필터링 마스크 크기가 커질 경우 속도가 느려지기 때문에 주파수 공간에서의 필터링을 수행함

2.1. 다양한 모양과 크기의 마스크

  • 필터링에 사용되는 마스크는 다양한 크기, 모양을 지정할 수 있지만, 대부분 3x3 정방형 필터를 사용
  • 마스크의 형태와 값에 따라 필터의 역할이 결정됨
    • 영상 부드럽게 만들기(블러링)
    • 영상 날카롭게 만들기(샤프닝)
    • 잡음 제거
    • 에지(edge) 검출

2.2. 수식(3x3 크기의 마스크)

Correlation(Convolution)dst(x,y)=j=02i=02m(i,j)src(x+i1,y+j1)Correlation(Convolution) \\ \, \\ dst(x, y) = \sum_{j=0}^2 \sum_{i=0}^2 m(i, j) src(x + i - 1, y + j - 1)

2.3. 최외곽 픽셀 처리

  • 최외곽도 필터링을 해주기 위해서 가장자리 픽셀을 확장해야 한다.

  • OpenCV에서는 BORDER_REFLECT_101이 위 그림과 같은 확장 기능을 가진다.

    Border Types 열거형 상수설명
    BORDER_CONSTANT상수로 채운다.
    BORDER_REPLICATE가장 끝 픽셀과 같은 값으로 채운다.
    BORDER_REFLECT가장 끝 픽셀을 한 번 채우고, 대칭으로 채운다.
    BORDER_REFLECT_101위 그림과 같다.
    BORDER_REFLECT101BORDER_REFLECT_101
    BORDER_DEFAULTBORDER_REFLECT_101
  • copyMakeBorder(): 영상 가장자리 픽셀을 확장

    vodi copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right,
                        int borderType, const Scalar& value = Scalar());

2.4. 기본적인 2D 필터링 함수

  • 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: 가장자리 픽셀 처리 방법

3. 엠보싱 필터(embossing)

  • 엠보싱: 철인의 요철 사이에 종이나 직물, 가죽, 금속판 따위를 끼운 뒤 그 뒷면에서 강하게 압력을 주어 돋을무늬를 만드는 일. 또는 그런 방법.

  • 엠보싱 필터: 입력 영상을 엠보싱 느낌이 나도록 변환하는 필터

    • 대각선 방향(-45º)으로 픽셀값이 급격하게 증가하면 0보다 큰 값
    • 대각선 방향(-45º)으로 픽셀값이 급격하게 감소하면 0보다 작은 값
    • 평탄한 영역에서는 0에 가까운 값
    • (결과를 효과적으로 보기 위해 결과 영상에 128을 더해서 볼게요)
  • 적용 결과
    마치 광원이 좌측 상단에서 장미꽃을 비추는 것 같은 효과를 준다.


📙 강의 - 강사 황선규

profile
JUST DO IT.

0개의 댓글