OpenCV - Dilation
Xói mòn và giãn nở là hai loại hoạt động hình thái học. Như tên của nó, các phép toán hình thái là một tập hợp các phép toán xử lý hình ảnh theo hình dạng của chúng.
Dựa trên hình ảnh đầu vào đã cho, một "phần tử cấu trúc" được phát triển. Điều này có thể được thực hiện trong bất kỳ quy trình nào trong hai quy trình. Chúng nhằm mục đích loại bỏ nhiễu và giải quyết các khuyết điểm, để làm cho hình ảnh rõ ràng.
Sự giãn nở
Quy trình này tuân theo phép tích chập với một số hạt nhân có hình dạng cụ thể như hình vuông hoặc hình tròn. Hạt nhân này có một điểm neo, biểu thị trung tâm của nó.
Kernel này được phủ lên hình ảnh để tính giá trị pixel tối đa. Sau khi tính toán, bức tranh được thay thế bằng mỏ neo ở tâm. Với quy trình này, các vùng sáng tăng kích thước và do đó kích thước hình ảnh tăng lên.
Ví dụ: kích thước của một đối tượng trong bóng râm trắng hoặc bóng sáng tăng lên, trong khi kích thước của một đối tượng trong bóng đen hoặc bóng tối giảm.
Bạn có thể thực hiện thao tác giãn nở trên hình ảnh bằng cách sử dụng dilate() phương pháp của imgproclớp học. Sau đây là cú pháp của phương thức này.
dilate(src, dst, kernel)
Phương thức này chấp nhận các tham số sau:
src - A Mat đối tượng đại diện cho nguồn (hình ảnh đầu vào) cho hoạt động này.
dst - A Mat đối tượng đại diện cho đích (hình ảnh đầu ra) cho hoạt động này.
kernel - A Mat đối tượng đại diện cho hạt nhân.
Thí dụ
Bạn có thể chuẩn bị ma trận hạt nhân bằng cách sử dụng getStructuringElement()phương pháp. Phương thức này chấp nhận một số nguyên đại diện chomorph_rect loại và một đối tượng của loại Size.
Imgproc.getStructuringElement(int shape, Size ksize);
Chương trình sau đây trình bày cách thực hiện phép toán giãn nở trên một hình ảnh nhất định.
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class DilateTest {
public static void main( String[] args ) {
// 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 ="C:/EXAMPLES/OpenCV/sample.jpg";
Mat src = Imgcodecs.imread(file);
// Creating an empty matrix to store the result
Mat dst = new Mat();
// Preparing the kernel matrix object
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT,
new Size((2*2) + 1, (2*2)+1));
// Applying dilate on the Image
Imgproc.dilate(src, dst, kernel);
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap10/Dilation.jpg", dst);
System.out.println("Image Processed");
}
}
Đầu vào
Giả sử rằng sau đây là hình ảnh đầu vào sample.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: