public BinarizationMethods() { const int Size = 61; using (var imgSrc = new IplImage(FilePath.Image.Binarization, LoadMode.GrayScale)) using (var imgGauss = imgSrc.Clone()) using (var imgNiblack = new IplImage(imgSrc.Size, BitDepth.U8, 1)) using (var imgSauvola = new IplImage(imgSrc.Size, BitDepth.U8, 1)) using (var imgBernsen = new IplImage(imgSrc.Size, BitDepth.U8, 1)) using (var imgNick = new IplImage(imgSrc.Size, BitDepth.U8, 1)) { //Cv.Smooth(imgSrc, imgGauss, SmoothType.Gaussian, 9); //Cv.EqualizeHist(imgGauss, imgGauss); Stopwatch sw = Stopwatch.StartNew(); { const double K = -0.2; Binarizer.NiblackFast(imgGauss, imgNiblack, Size, K); } Console.WriteLine("Niblack: {0}ms", sw.ElapsedMilliseconds); sw.Reset(); sw.Start(); { const double K = 0.2; const double R = 64; Binarizer.SauvolaFast(imgGauss, imgSauvola, Size, K, R); } Console.WriteLine("Sauvola: {0}ms", sw.ElapsedMilliseconds); sw.Reset(); sw.Start(); { const byte ContrastMin = 15; const byte BgThreshold = 127; Binarizer.Bernsen(imgGauss, imgBernsen, Size, ContrastMin, BgThreshold); } Console.WriteLine("bernsen: {0}ms", sw.ElapsedMilliseconds); sw.Reset(); sw.Start(); { const double K = -0.14; Binarizer.Nick(imgGauss, imgNick, Size, K); } Console.WriteLine("nick: {0}ms", sw.ElapsedMilliseconds); using (new CvWindow("src", imgSrc)) //using (new CvWindow("gauss", imgGauss)) using (new CvWindow("niblack", imgNiblack)) using (new CvWindow("sauvola", imgSauvola)) using (new CvWindow("bernsen", imgBernsen)) using (new CvWindow("nick", imgNick)) { Cv.WaitKey(); } } }
public void Run() { using (var src = Cv2.ImRead(FilePath.Image.Binarization, ImreadModes.GrayScale)) using (var niblack = new Mat()) using (var sauvola = new Mat()) using (var bernsen = new Mat()) using (var nick = new Mat()) { int kernelSize = 51; var sw = new Stopwatch(); sw.Start(); Binarizer.Niblack(src, niblack, kernelSize, -0.2); sw.Stop(); Console.WriteLine($"Niblack {sw.ElapsedMilliseconds} ms"); sw.Restart(); Binarizer.Sauvola(src, sauvola, kernelSize, 0.1, 64); sw.Stop(); Console.WriteLine($"Sauvola {sw.ElapsedMilliseconds} ms"); sw.Restart(); Binarizer.Bernsen(src, bernsen, kernelSize, 50, 200); sw.Stop(); Console.WriteLine($"Bernsen {sw.ElapsedMilliseconds} ms"); sw.Restart(); Binarizer.Nick(src, nick, kernelSize, -0.14); sw.Stop(); Console.WriteLine($"Nick {sw.ElapsedMilliseconds} ms"); using (new Window("src", WindowMode.AutoSize, src)) using (new Window("Niblack", WindowMode.AutoSize, niblack)) using (new Window("Sauvola", WindowMode.AutoSize, sauvola)) using (new Window("Bernsen", WindowMode.AutoSize, bernsen)) using (new Window("Nick", WindowMode.AutoSize, nick)) { Cv2.WaitKey(); } } }