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

가장자리 검출 (Edge)

영상이나 이미지를 가장자리를 검출 하기 위해 사용합니다.

원본(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 canny;
        IplImage sobel;
        IplImage laplace;        
            
        public IplImage CannyEdge(IplImage src)
        {
            canny = new IplImage(src.Size, BitDepth.U8, 1);
            Cv.Canny(src, canny, 0, 100);
            return canny;
        }

        public IplImage SobelEdge(IplImage src)
        {
            sobel = new IplImage(src.Size, BitDepth.U8, 3);
            Cv.Copy(src, sobel);
            Cv.Sobel(sobel, sobel, 1 , 0, ApertureSize.Size3);
            return sobel;
        }

        public IplImage LaplaceEdge(IplImage src)
        {
            laplace = new IplImage(src.Size, BitDepth.U8, 3);
            Cv.Laplace(src, laplace);
            return laplace;
        }
        
        public void Dispose()
        {
            if (canny != null) Cv.ReleaseImage(canny);
            if (sobel != null) Cv.ReleaseImage(sobel);
            if (laplace != null) Cv.ReleaseImage(laplace);                
        }
    }
}


세부 코드

Canny Edge

public IplImage CannyEdge(IplImage src)
{
    canny = new IplImage(src.Size, BitDepth.U8, 1);
    Cv.Canny(src, canny, 0, 100);
    return canny;
}

Canny Edge의 경우 단색이기 때문에 채널은 1입니다.

Cv.Canny()를 이용해서 가장자리를 검출 할 수 있습니다.

Cv.Canny(원본, 결과, 임계값1, 임계값2)를 설정합니다.

그라디언트는 Edge에 수직한다는 것을 이용하여 Edge가 아니면 제거합니다.

  • 임계값1 : 임계값1 이하에 포함된 가장자리는 가장자리에서 제외합니다.

  • 임계값2 : 임계값2 이상에 포함된 가장자리는 가장자리로 간주합니다.


Sobel Edge

public IplImage SobelEdge(IplImage src)
{
    sobel = new IplImage(src.Size, BitDepth.U8, 3);
    Cv.Sobel(src, sobel, 1 , 0, ApertureSize.Size3);
    return sobel;
}

Sobel Edgex방향 미분값y방향 미분값을 이용하여 가장자리를 검출합니다.

Cv.Sobel()를 이용해서 가장자리를 검출 할 수 있습니다.

Cv.Sobel(원본, 결과, x방향 미분, y방향 미분, 커널의 크기)를 설정합니다.


Laplace Edge

public IplImage LaplaceEdge(IplImage src)
{
    laplace = new IplImage(src.Size, BitDepth.U8, 3);
    Cv.Laplace(src, laplace);
    return laplace;
}

Laplace EdgeCv.Laplace()를 이용해서 가장자리를 검출 할 수 있습니다.

Cv.Laplace(원본, 결과)를 설정합니다.



메인 코드

using (OpenCV Convert = new OpenCV())
{
    pictureBoxIpl2.ImageIpl = Convert.CannyEdge(src);
}

//

using (OpenCV Convert = new OpenCV())
{
    pictureBoxIpl2.ImageIpl = Convert.SobelEdge(src);
}

//

using (OpenCV Convert = new OpenCV())
{
    pictureBoxIpl2.ImageIpl = Convert.LaplaceEdge(src);
}

*Edge가장자리 검출이 적용된 이미지를 표시합니다.



출력 결과

CannyEdg - 0, 255


CannyEdge - 100, 255


CannyEdge - 0, 100


SobelEdge - 0, 1


SobelEdge - 1, 0


LaplaceEdge

댓글 남기기