C# OpenCV 강좌 : 제 45강 - 피라미드 화상 분할

C# OpenCV Pyramid Segmentation

C# OpenCV 강좌 : 제 45강 - 피라미드 화상 분할
[ C#-OpenCvSharp2 ] - 윤대희

피라미드 화상 분할(Pyramid Segmentation)


1 PyrSegmentation 함수를 이용하여 이미지 피라미드에 의한 화상 분할을 진행합니다.

레벨을 지정하여 이미지 피라미드를 만들고 이 정보를 이용하여 이미지 분할을 실행합니다.



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 pyrseg;
        
        public IplImage PyrSegmentation(IplImage src)
        {
            IplImage srcROI = src.Clone();
            pyrseg = new IplImage(src.Size, BitDepth.U8, 3);

            int level = 5;
            double threshold1 = 255.0;
            double threshold2 = 50.0;

            CvRect roi = new CvRect()
            {
                X = 0,
                Y = 0,
                Width = srcROI.Width & -(1 << level),
                Height = srcROI.Height & -(1 << level)
            };

            srcROI.ROI = roi;
            pyrseg = srcROI.Clone();

            Cv.PyrSegmentation(srcROI, pyrseg, level, threshold1, threshold2);
            
            return pyrseg;
        }
                  
        public void Dispose()
        {
            if (pyrseg != null) Cv.ReleaseImage(pyrseg);
        }
    }
}



Class Code


IplImage srcROI = src.Clone();
pyrseg = new IplImage(src.Size, BitDepth.U8, 3);

계산에 사용할 srcROI를 생성하여 src를 복사하여 저장합니다.

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


int level = 5;
double threshold1 = 255.0;
double threshold2 = 50.0;

주요 매개변수인 레벨임계값1, 임계값2를 선언합니다.

레벨은 비트 연산시 사용할 값입니다. 레벨값이 높을 수록 보여지는 이미지가 일부 누락될 수 있습니다.

임계값이진화 함수에서 사용되는 임계값과 동일한 역할을 합니다.


CvRect roi = new CvRect()
{
    X = 0,
    Y = 0,
    Width = srcROI.Width & -(1 << level),
    Height = srcROI.Height & -(1 << level)
};

관심 영역으로 사용할 roi를 생성합니다.

너비높이AND연산을 통하여 좌측으로 쉬프트 시킵니다. 2의 보수법을 사용합니다.


srcROI.ROI = roi;
pyrseg = srcROI.Clone();

srcROI관심 영역을 적용합니다. 관심 영역이 적용된 srcROI를 pyrseg에 복사합니다.


Cv.PyrSegmentation(srcROI, pyrseg, level, threshold1, threshold2);

Cv.PyrSegmentation()을 적용합니다. PyrSegmentation(원본, 결과, 레벨값, 임계값1, 임계값2)를 사용합니다.



Result


level 1

2


level 2

3


level 3

4


level 5

5


level 1, threshold2 100

5


level 1, threshold2 150

5



Book Image

개정판이 출간됐습니다!

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

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

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

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

    후원하기


    ⤧  Previous post C# OpenCV 강좌 : 제 44강 - 거리 변환 ⤧  Next post C# OpenCV 강좌 : 제 46강 - 피라미드 평균 이동 분할
    C#-OpenCvSharp2 Category