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 |
|
|