상위 목록: 하위 목록: 작성 날짜: 읽는 데 9 분 소요

2D 필터링(2D Filter)

Filter2D 함수를 이용하여 임의의 선형 필터를 이미지나 영상에 적용합니다.

커널을 직접 생성하여 필터를 적용할 수 있습니다.

가우시안 필터, 중간값 필터를 비롯하여 임의의 필터 또한 직접 생성하여 적용할 수 있습니다.

원본(Source, src)은 영상이나 이미지를 사용합니다.

  • 영상 사용하기 : [3강 바로가기][3강]

  • 이미지 사용하기 : [4강 바로가기][4강]



메인 코드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;

namespace Project
{
    class OpenCV : IDisposable
    {  
        IplImage filter;
        
        public IplImage Filter2D(IplImage src)
        {   
            filter = new IplImage(src.Size, BitDepth.U8, 3);

            float[] data =  {   1,  4,  7,  4,  1,
                                4,  16, 26, 16, 4,
                                7,  26, 41, 26, 7,
                                4,  16, 26, 16, 4,
                                1,  4,  7,  4,  1   };

            CvMat kernel = new CvMat(5, 5, MatrixType.F32C1, data);

            Cv.Normalize(kernel, kernel, 1.0, 0, NormType.L1);
            Cv.Filter2D(src, filter, kernel);

            return filter;
        }
                  
        public void Dispose()
        {
            if (filter != null) Cv.ReleaseImage(filter);
        }
    }
}


세부 코드

filter = new IplImage(src.Size, BitDepth.U8, 3);

결과에 사용할 filter를 생성합니다.


float[] data =  {   1,  4,  7,  4,  1,
                    4,  16, 26, 16, 4,
                    7,  26, 41, 26, 7,
                    4,  16, 26, 16, 4,
                    1,  4,  7,  4,  1   };

1차원 배열을 생성하여 임의의 커널을 생성합니다.

  • Tip : 해당 커널은 가우시안 블러 커널과 동일합니다.


CvMat kernel = new CvMat(5, 5, MatrixType.F32C1, data);

CvMat을 이용하여 매트릭스를 생성합니다. new CvMat(n, m, 매트릭스 타입, 배열)입니다.

nxm 크기의 매트릭스로 변환하여 생성합니다.


Cv.Normalize(kernel, kernel, 1.0, 0, NormType.L1);

Cv.Normalize() 함수를 이용하여 매트릭스를 정규화합니다.

Cv.Normalize(원본, 결과, 최댓값, 최솟값, 정규화기준)입니다.


  • 최댓값 : 정규화된 값의 최댓값입니다.
  • 최솟값 : 정규화된 값의 최솟값입니다.
  • 정규화기준 : 정규화할때의 기준을 선택합니다.
    • NormType.C : 매트릭스의 최댓값을 기준으로 정규화합니다.
    • NormType.L1 : 매트릭스의 합을 기준으로 정규화합니다.
    • NormType.L2 : 매트릭스의 유클리드 노름을 기준으로 정규화합니다.


Cv.Filter2D(src, filter, kernel);

Cv.Filter2D()을 적용합니다. Cv.Filter2D(원본, 결과, 커널)을 사용합니다.



출력 결과

Filter2D


SmoothType.Gaussian 5x5

댓글 남기기