Java DIP - Ngưỡng cơ bản

Định mức cho phép phân đoạn hình ảnh một cách dễ dàng nhất. Phân đoạn hình ảnh có nghĩa là chia hình ảnh hoàn chỉnh thành một tập hợp các pixel theo cách sao cho các pixel trong mỗi tập hợp có một số đặc điểm chung. Phân đoạn hình ảnh rất hữu ích trong việc xác định các đối tượng và ranh giới của chúng.

Trong chương này chúng ta thực hiện một số thao tác tạo ngưỡng cơ bản trên ảnh.

Chúng tôi sử dụng OpenCV chức năng threshold. Nó có thể được tìm thấy dướiImgprocgói hàng. Cú pháp của nó được đưa ra dưới đây:

Imgproc.threshold(source, destination, thresh , maxval , type);

Các thông số được mô tả bên dưới:

Sr.No. Mô tả về Thông Số
1

source

Nó là hình ảnh nguồn.

2

destination

Nó là hình ảnh đích.

3

thresh

Nó là giá trị ngưỡng.

4

maxval

Đây là giá trị tối đa được sử dụng với các loại ngưỡng THRESH_BINARY và THRESH_BINARY_INV.

5

type

Các loại có thể có là THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC và THRESH_TOZERO.

Ngoài các phương thức tạo ngưỡng này, còn có các phương thức khác được cung cấp bởi lớp Imgproc. Chúng được mô tả ngắn gọn -

Sr.No. Phương pháp & Mô tả
1

cvtColor(Mat src, Mat dst, int code, int dstCn)

Nó chuyển đổi một hình ảnh từ không gian màu này sang không gian màu khác.

2

dilate(Mat src, Mat dst, Mat kernel)

Nó làm giãn hình ảnh bằng cách sử dụng một phần tử có cấu trúc cụ thể.

3

equalizeHist(Mat src, Mat dst)

Nó cân bằng biểu đồ của một hình ảnh thang độ xám.

4

filter2D(Mat src, Mat dst, int ddepth, Mat kernel, Point anchor, double delta)

Nó biến đổi một hình ảnh với hạt nhân.

5

GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX)

Nó làm mờ hình ảnh bằng cách sử dụng bộ lọc Gaussian.

6

integral(Mat src, Mat sum)

Nó tính tích phân của một hình ảnh.

Thí dụ

Ví dụ sau minh họa việc sử dụng lớp Imgproc để thực hiện các hoạt động ngưỡng đối với một hình ảnh:

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class main {
   public static void main( String[] args ) {
   
      try{

         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         Mat source = Highgui.imread("digital_image_processing.jpg",  Highgui.CV_LOAD_IMAGE_COLOR);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());

         destination = source;
         Imgproc.threshold(source,destination,127,255,Imgproc.THRESH_TOZERO);
         Highgui.imwrite("ThreshZero.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("error: " + e.getMessage());
      }
   }
}

Đầu ra

Khi bạn thực thi mã đã cho, kết quả sau sẽ được nhìn thấy:

Ảnh gốc

Trên hình ảnh gốc ở trên, một số hoạt động ngưỡng được thực hiện được hiển thị trong đầu ra bên dưới:

Thresh Binary

Thresh Binary Invert

Thresh Zero