OpenCV - Uyarlanabilir Eşik

İçinde simple thresholdingeşik değeri globaldir, yani görüntüdeki tüm pikseller için aynıdır. Adaptive thresholding daha küçük bölgeler için eşik değerin hesaplandığı yöntemdir ve bu nedenle farklı bölgeler için farklı eşik değerleri olacaktır.

OpenCV'de, yöntemi kullanarak bir görüntü üzerinde Uyarlanabilir eşik işlemi gerçekleştirebilirsiniz. adaptiveThreshold() of Imgprocsınıf. Bu yöntemin sözdizimi aşağıdadır.

adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

Bu yöntem aşağıdaki parametreleri kabul eder -

  • src - Sınıfın bir nesnesi Mat kaynak (giriş) görüntüsünü temsil eder.

  • dst - Sınıfın bir nesnesi Mat hedef (çıktı) görüntüsünü temsil eder.

  • maxValue - Piksel değeri eşik değerden fazla ise verilecek değeri temsil eden çift tipli bir değişken.

  • adaptiveMethod- Kullanılacak uyarlamalı yöntemi temsil eden tipte bir tamsayı değişkeni. Bu, aşağıdaki iki değerden biri olacaktır

    • ADAPTIVE_THRESH_MEAN_C - eşik değeri, mahalle alanının ortalamasıdır.

    • ADAPTIVE_THRESH_GAUSSIAN_C - eşik değeri, ağırlıkların bir Gauss penceresi olduğu mahalle değerlerinin ağırlıklı toplamıdır.

  • thresholdType - Kullanılacak eşik türünü temsil eden tam sayı tipi bir değişken.

  • blockSize - Eşik değerini hesaplamak için kullanılan piksel mahallesinin boyutunu temsil eden tam sayı türünde bir değişken.

  • C - Her iki yöntemde de kullanılan sabiti temsil eden çift tipli bir değişken (ortalamadan veya ağırlıklı ortalamadan çıkarılır).

Misal

Aşağıdaki program, OpenCV'de bir görüntü üzerinde Uyarlamalı eşik işleminin nasıl gerçekleştirileceğini gösterir. Burada uyarlanabilir eşik türü seçiyoruzbinary ve ADAPTIVE_THRESH_MEAN_C eşik yöntemi için.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class AdaptiveThresh {
   public static void main(String args[]) throws Exception {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      // Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap14/thresh_input.jpg";
      
      // Reading the image
      Mat src = Imgcodecs.imread(file,0);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();

      Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C,
         Imgproc.THRESH_BINARY, 11, 12);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap14/Adaptivemean_thresh_binary.jpg", dst);

      System.out.println("Image Processed");
   } 
}

Aşağıdakinin giriş görüntüsü olduğunu varsayalım thresh_input.jpg yukarıdaki programda belirtilmiştir.

Çıktı

Programı çalıştırırken aşağıdaki çıktıyı alacaksınız -

Image Processed

Belirtilen yolu açarsanız, çıktı görüntüsünü aşağıdaki gibi gözlemleyebilirsiniz -

Diğer Uyarlanabilir Eşik Türleri

Buna ek olarak ADAPTIVE_THRESH_MEAN_C uyarlanabilir yöntem olarak ve THRESH_BINARY Önceki örnekte gösterildiği gibi eşik türü olarak, bu iki değerin daha fazla kombinasyonunu seçebiliriz.

Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C, 
   Imgproc.THRESH_BINARY, 11, 12);

Aşağıdakiler, parametreler için çeşitli değer kombinasyonlarını temsil eden değerlerdir adaptiveMethod ve thresholdType ve ilgili çıktıları.

adaptiveMethod / eşik Tipi ADAPTIVE_THRESH_MEAN_C ADAPTIVE_THRESH_GAUSSIAN_C:
THRESH_BINARY
THRESH_BINARY_INV