Computer >> Máy Tính >  >> Lập trình >> Java

Giải thích kỹ thuật ngưỡng Otsu trong OpenCV bằng ví dụ Java


Định ngưỡng là một kỹ thuật đơn giản để phân đoạn hình ảnh. nó thường được sử dụng để tạo ảnh nhị phân. Trong trường hợp này, các pixel lớn hơn giá trị ngưỡng nhất định sẽ được thay thế bằng giá trị chuẩn

  • Nói một cách đơn giản, giá trị ngưỡng là không đổi trong toàn bộ hình ảnh.

  • Ngưỡng thích ứng, 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 khi trong kỹ thuật ngưỡng Otsu, giá trị ngưỡng được xác định tự động, nó chọn giá trị ngưỡng tối ưu dựa trên biểu đồ hình ảnh.

Ngưỡng () phương pháp của Imgproc lớp chấp nhận

  • Hai đối tượng Mat đại diện cho hình ảnh nguồn và hình ảnh đích.

  • Hai biến số nguyên đại diện cho ngưỡng hoặc giá trị tiêu chuẩn.

  • Một biến số nguyên đại diện cho loại ngưỡng đơn giản.

Dưới dạng các tham số và thực hiện thao tác ngưỡng trên hình ảnh đã cho và lưu trữ kết quả trong ma trận đích.

Đối với kỹ thuật ngưỡng Otsu trên hình ảnh gọi phương pháp này bỏ qua Imgproc.THRESH_OTSU như một loại kỹ thuật.

Ví dụ

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class OtsuThresholding extends Application {
   public void start(Stage stage) throws IOException {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      String file ="D:\\Images\\win2.jpg";
      Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_GRAYSCALE);
      //Creating an empty matrices to store the destination image.
      Mat dst = new Mat(src.rows(), src.cols(), src.type());
      //Applying simple threshold
      Imgproc.threshold(src, dst, 50, 255, Imgproc.THRESH_OTSU);  
      //Converting matrix to JavaFX writable image
      Image img = HighGui.toBufferedImage(dst);
      WritableImage writableImage= SwingFXUtils.toFXImage((BufferedImage) img, null);
      //Setting the image view
      ImageView imageView = new ImageView(writableImage);
      imageView.setX(10);
      imageView.setY(10);
      imageView.setFitWidth(575);
      imageView.setPreserveRatio(true);
      //Setting the Scene object
      Group root = new Group(imageView);
      Scene scene = new Scene(root, 595, 400);
      stage.setTitle("Otsu Threshold");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]) {
      launch(args);
   }
}

Hình ảnh đầu vào

Giải thích kỹ thuật ngưỡng Otsu trong OpenCV bằng ví dụ Java

Đầu ra

Giải thích kỹ thuật ngưỡng Otsu trong OpenCV bằng ví dụ Java