Phép toán hình thái là tập hợp các phép toán xử lý ảnh theo các hình dạng cho trước. Xói mòn và giãn nở là hai hoạt động hình thái cơ bản.
-
Trong quá trình giãn nở, các pixel bổ sung được thêm vào ranh giới hình ảnh.
-
Trong quá trình xói mòn, các pixel bổ sung bị xóa khỏi ranh giới hình ảnh.
Tổng số pixel được thêm / bớt phụ thuộc vào kích thước của phần tử cấu trúc được sử dụng. Bạn có thể thực hiện các hoạt động xói mòn và giãn nở bằng cách sử dụng các phương thức erode () và dilate () tương ứng.
Ngoài sự giãn nở, OpenCV cung cấp thêm nhiều phép biến đổi hình thái như Mở đầu, Đóng cửa, Gradient Hình thái, Mũ chóp, Mũ đen.
Hình thái đóng lại
Đây là một hoạt động tương đương với việc áp dụng độ giãn nở trên một hình ảnh và sau đó làm xói mòn hình ảnh thu được. Sử dụng điều này, bạn có thể loại bỏ / lấp đầy các lỗ nhỏ trong hình ảnh động. Nói một cách ngắn gọn, Morphological Closing được sử dụng để loại bỏ nhiễu khỏi ảnh.
Bạn có thể áp dụng điều này cho hình ảnh bằng cách sử dụng morphologyEx () phương pháp. Phương thức này chấp nhận -
-
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 loại hoạt động Hình thái học.
-
Một đối tượng Mat đại diện cho ma trận hạt nhân.
Để áp dụng thao tác mở Hình thái học cho hình ảnh, bạn cần gọi phương thức được chỉ định ở trên bằng cách chuyển Imgproc.MORPH_CLOSE dưới dạng (thứ 3) một tham số, cùng với đích nguồn và ma trận hạt nhân.
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.CvType; import org.opencv.core.Mat; import org.opencv.highgui.HighGui; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class MorphologicalClosing extends Application { public void start(Stage stage) throws IOException { //Loading the OpenCV core library System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); //Reading image data String file ="D:\\Images\\morph_input2.jpg"; Mat src = Imgcodecs.imread(file); //Creating destination matrix Mat dst = new Mat(src.rows(), src.cols(), src.type()); //Preparing the kernel matrix object Mat kernel = Mat.ones(5,5, CvType.CV_32F); //Applying dilate on the Image Imgproc.morphologyEx(src, dst, Imgproc.MORPH_CLOSE, kernel); //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("Dilation Example"); 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 ra kết quả sau -