OpenCV - Ngưỡng thích ứng

Trong simple thresholding, giá trị ngưỡng là toàn cục, tức là nó giống nhau đối với tất cả các pixel trong hình ảnh. Adaptive thresholding là phương pháp mà giá trị ngưỡng được tính cho các vùng nhỏ hơn và do đó, sẽ có các giá trị ngưỡng khác nhau cho các vùng khác nhau.

Trong OpenCV, bạn có thể thực hiện thao tác ngưỡng Thích ứng trên hình ảnh bằng phương pháp adaptiveThreshold() sau đó Imgproclớp học. Sau đây là cú pháp của phương thức này.

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

Phương thức này chấp nhận các tham số sau:

  • src - Một đối tượng của lớp Mat đại diện cho hình ảnh nguồn (đầu vào).

  • dst - Một đối tượng của lớp Mat đại diện cho hình ảnh đích (đầu ra).

  • maxValue - Một biến kiểu kép đại diện cho giá trị sẽ được cung cấp nếu giá trị pixel lớn hơn giá trị ngưỡng.

  • adaptiveMethod- Một biến kiểu số nguyên đại diện cho phương thức thích ứng sẽ được sử dụng. Đây sẽ là một trong hai giá trị sau

    • ADAPTIVE_THRESH_MEAN_C - giá trị ngưỡng là giá trị trung bình của khu vực lân cận.

    • ADAPTIVE_THRESH_GAUSSIAN_C - giá trị ngưỡng là tổng trọng số của các giá trị lân cận trong đó trọng số là một cửa sổ Gaussian.

  • thresholdType - Một biến kiểu số nguyên đại diện cho kiểu ngưỡng sẽ được sử dụng.

  • blockSize - Một biến kiểu số nguyên đại diện cho kích thước của pixelneighborhood được sử dụng để tính toán giá trị ngưỡng.

  • C - Một biến kiểu kép đại diện cho hằng số được sử dụng trong cả hai phương pháp (đã trừ giá trị trung bình hoặc giá trị trung bình có trọng số).

Thí dụ

Chương trình sau đây trình bày cách thực hiện thao tác ngưỡng Thích ứng trên hình ảnh trong OpenCV. Ở đây, chúng tôi đang chọn ngưỡng thích ứng của loạibinaryADAPTIVE_THRESH_MEAN_C đối với phương pháp ngưỡng.

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");
   } 
}

Giả sử rằng sau đây là hình ảnh đầu vào thresh_input.jpg được chỉ định trong chương trình trên.

Đầu ra

Khi thực hiện chương trình, bạn sẽ nhận được kết quả sau:

Image Processed

Nếu bạn mở đường dẫn được chỉ định, bạn có thể quan sát hình ảnh đầu ra như sau:

Các loại ngưỡng thích ứng khác

Ngoài các ADAPTIVE_THRESH_MEAN_C là phương pháp thích ứng và THRESH_BINARY là loại ngưỡng như đã trình bày trong ví dụ trước, chúng ta có thể chọn nhiều kết hợp hơn của hai giá trị này.

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

Sau đây là các giá trị đại diện cho các tổ hợp giá trị khác nhau cho các tham số adaptiveMethodthresholdType và kết quả đầu ra tương ứng của chúng.

adaptiveMethod / ngưỡngType ADAPTIVE_THRESH_MEAN_C ADAPTIVE_THRESH_GAUSSIAN_C:
THRESH_BINARY
THRESH_BINARY_INV