C# OpenCV 강좌 : 제 47강 - 2D 필터링

C# OpenCV 2D Filter

C# OpenCV 강좌 : 제 47강 - 2D 필터링
[ C#-OpenCvSharp2 ] - 윤대희

2D 필터링(2D Filter)


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

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

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



Main Code


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

namespace test
{
    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);
        }
    }
}



Class Code


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(원본, 결과, 커널)을 사용합니다.



Result


Filter2D

2


SmoothType.Gaussian 5x5

3



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post C# OpenCV 강좌 : 제 46강 - 피라미드 평균 이동 분할 ⤧  Next post C# OpenCV 강좌 : 제 48강 - 윤곽 추적
    C#-OpenCvSharp2 Category