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

팽창(Dilate) 및 침식(Erode)

영상이나 이미지의 화소값을 대체하기 위해 사용합니다.

영상이나 이미지에서 DilateErode를 이용해 이미지의 정확도를 높일 수 있습니다.

팽창(Dilate)은 구조 요소를 사용하여 이웃한 화소를 최대 픽셀로 대체합니다.

즉, 어두운 영역이 줄어들며 밝은 영역이 늘어납니다. 노이즈 제거 후 줄어든 크기를 복구하고자 할 때 주로 사용합니다.

침식(Erode)은 구조 요소를 사용하여 이웃한 화소를 최소 픽셀로 대체합니다.

즉, 밝은 영역이 줄어들며 어두운 영역이 늘어납니다. 노이즈 제거에 주로 사용합니다.

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



클래스 코드

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

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

            IplConvKernel element = new IplConvKernel(4, 4, 2, 2, ElementShape.Custom, new int[3, 3]);
            Cv.Dilate(src, dil, element, 3);
            return dil;
        }
        
        public IplImage ErodeImage(IplImage src)
        {
            ero = new IplImage(src.Size, BitDepth.U8, 3);

            IplConvKernel element = new IplConvKernel(4, 4, 2, 2, ElementShape.Custom, new int[3, 3]);
            Cv.Erode(src, ero, element, 3);
            return ero;
        }        
                  
        public void Dispose()
        {
            if (dil != null) Cv.ReleaseImage(dil);
            if (ero != null) Cv.ReleaseImage(ero);
        }
    }
}


세부 코드

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

dilero팽창침식된 이미지입니다.

Binary 또는 GrayScale 이미지 이용 시 채널은 1로 대체합니다.


IplConvKernel element = new IplConvKernel(4, 4, 2, 2, ElementShape.Custom, new int[3, 3]);

모폴로지(Morphology)의 형태학적 작업을 위해 IplConvKernel을 이용하여 지정된 크기와 구조 요소를 반환합니다. IplConvKernel(너비, 높이, X좌표, Y좌표, 형태, 커스텀형태)입니다.

  • 너비(cols) : 구조 요소의 너비
  • 높이(rows) : 구조 요소의 높이
  • X좌표(anchorX) : 앵커의 X 좌표
  • Y좌표(anchorY) : 앵커의 Y 좌표
  • 형태(ElementShape.*) : 구조 요소의 형태
    • ElementShape.Cross : 십자형 구조 요소
    • ElementShape.Custom : 사용자 정의 구조 요소
    • ElementShape.Ellipse : 타원형(직사각형에 채워진 타원) 구조 요소
    • ElementShape.Rect : 직사각형 구조 요소
  • 커스텀형태(values) : 사용자 정의 구조 요소의 형태, ElementShape.Custom를 이용할 때 사용하며 new int[n, m]으로 선언


Cv.Dilate(src, dil, element, 3);
Cv.Erode(src, ero, element, 3);

Cv.Dilate()Cv.Erode()를 이용하여 팽창침식 할 수 있습니다.

Cv.*(원본, 결과, 구조 요소, 반복횟수)입니다. 반복횟수만큼 적용합니다.



출력 결과

팽창(Dilate)


침식(Erode)

댓글 남기기