C#/C# OpenCV/

C# OpenCV 4-5. AdaptiveThreshold

2019. 11. 11.

대표함수

Cv2.AdaptiveThreshold 적응형 이진화

 

Example Code

using System;
using System.Windows.Forms;
using OpenCvSharp;

namespace adaptivetest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Mat src = Cv2.ImRead("image.jpg");
            Mat gray = new Mat();
            Mat binarydst = new Mat();
            Cv2.ImShow("src", src);

            Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);
            Cv2.Threshold(gray, binarydst, 150, 255, ThresholdTypes.Binary);
            Cv2.ImShow("Binary", binarydst);
            Cv2.AdaptiveThreshold(gray, binarydst, 150, AdaptiveThresholdTypes.MeanC, ThresholdTypes.Binary, 25, 5);
            Cv2.ImShow("Mean, Binary", binarydst);
            Cv2.AdaptiveThreshold(gray, binarydst, 150, AdaptiveThresholdTypes.GaussianC, ThresholdTypes.Binary, 25, 5);
            Cv2.ImShow("Gaussian, Binary", binarydst);

            Cv2.WaitKey(0);
            Cv2.DestroyAllWindows();
        }
    }
}

 

Explain Code


Cv2.AdaptiveThreshold(gray, binarydst, 150, AdaptiveThresholdTypes.MeanC, ThresholdTypes.Binary, 25, 5);
Cv2.ImShow("Mean, Binary", binarydst);
Cv2.AdaptiveThreshold(gray, binarydst, 150, AdaptiveThresholdTypes.GaussianC, ThresholdTypes.Binary, 25, 5);
Cv2.ImShow("Gaussian, Binary", binarydst);

Cv2.AdaptiveThreshold(src, dst, double maxValue, AdaptiveThresholdTypes, ThresholdTypes, int blockSize, double c)

    src이미지를 maxValue를 기준값으로 ThresholdTypes이진화를 blockSize안의 픽셀들에 가중치 c를 추가하여    

    AdaptiveThresholdTypes방식으로 변환 dst로 출력

        AdaptiveThresholdTypes MeanC 블럭안 픽셀들의 평균을 이용

                                        GaussianC 블럭안 픽셀들의 가우시안평균을 이용

        ※blockSize 는 홀수만가능 ex) 3, 5, 7, 9 ....

 

결과

이미지에 음영의 차이가 심한경우 일반적인 이진화로는 원하는 결과를 도출할수 없다.

적응형 이진화를 통해 음영이 심하더라도 적절한 blockSize와 C값 설정을 통해 원하는 결과를 도출가능.