Đị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.
Ngưỡng thích ứng 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.
adaptiveThreshold () thực hiện thao tác Ngưỡng thích ứng trên hình ảnh đã cho. Sau đây là các tham số của phương thức này -
-
Hai đối tượng Mat đại diện cho hình ảnh nguồn và hình ảnh đích.
-
Một biến số nguyên đại diện cho giá trị ngưỡng.
-
Hai biến số nguyên đại diện cho phương pháp thích ứng và loại ngưỡng sẽ được sử dụng.
-
Một loại biến số nguyên đại diện cho kích thước của vùng lân cận pixel được sử dụng để tính toán giá trị ngưỡng.
-
Một biến số nguyên kiểu kép đại diện cho hằng số được sử dụng trong cả hai phương pháp.
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 AdaptiveThreshold 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.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 11, 12); //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("Adaptive Threshold"); stage.setScene(scene); stage.show(); } public static void main(String args[]) { launch(args); } }
Hình ảnh đầu vào
Đầu ra
Khi thực thi, chương trình trên tạo các cửa sổ sau -