OpenCV - Chuyển đổi khoảng cách

Các distance transformtoán tử thường lấy hình ảnh nhị phân làm đầu vào. Trong thao tác này, cường độ mức xám của các điểm bên trong vùng tiền cảnh được thay đổi để tạo khoảng cách tương ứng của chúng với giá trị 0 gần nhất (ranh giới).

Bạn có thể áp dụng biến đổi khoảng cách trong OpenCV bằng phương pháp distanceTransform(). Sau đây là cú pháp của phương thức này.

distanceTransform(src, dst, distanceType, maskSize)

Phương thức này chấp nhận các tham số sau:

  • src - Một đối tượng của lớp Mat đại diện cho hình ảnh nguồn (đầu vào).

  • dst - Một đối tượng của lớp Mat đại diện cho hình ảnh đích (đầu ra).

  • distanceType - Một biến kiểu số nguyên đại diện cho kiểu biến đổi khoảng cách được áp dụng.

  • maskSize - Một biến kiểu số nguyên đại diện cho kích thước mặt nạ sẽ được sử dụng.

Thí dụ

Chương trình sau đây trình bày cách thực hiện phép toán biến đổi khoảng cách trên một hình ảnh cho trước.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class DistanceTransform {
   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 ="E:/OpenCV/chap19/input.jpg";
      Mat src = Imgcodecs.imread(file,0);

      // Creating an empty matrix to store the results
      Mat dst = new Mat();
      Mat binary = new Mat();

      // Converting the grayscale image to binary image
      Imgproc.threshold(src, binary, 100, 255, Imgproc.THRESH_BINARY);

      // Applying distance transform
      Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C, 3);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap19/distnceTransform.jpg", dst);

      System.out.println("Image Processed");
   }
}

Giả sử rằng sau đây là hình ảnh đầu vào input.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:

Các loại hoạt động biến đổi khoảng cách

Ngoài loại hoạt động khoảng cách DIST_Cđã trình bày trong ví dụ trước, OpenCV phục vụ nhiều loại hoạt động biến đổi khoảng cách khác nhau. Tất cả các kiểu này được đại diện bởi các trường tĩnh được xác định trước (giá trị cố định) của lớp Imgproc.

Bạn có thể chọn loại hoạt động biến đổi khoảng cách mà bạn cần, bằng cách chuyển giá trị xác định trước tương ứng của nó cho tham số có tên distanceType sau đó distanceTransform() phương pháp.

// Applying distance transform 
Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C, 3);

Sau đây là các giá trị đại diện cho các loại distanceTransform hoạt động và kết quả đầu ra tương ứng của chúng.

Hoạt động và mô tả Đầu ra
DIST_C
DIST_L1
DIST_L2
DIST_LABEL_PIXEL
DIST_MASK_3