OpenCV - Transformação de Distância

o distance transformoperador geralmente pega imagens binárias como entradas. Nesta operação, as intensidades do nível de cinza dos pontos dentro das regiões de primeiro plano são alteradas para distanciar suas respectivas distâncias do valor 0 mais próximo (limite).

Você pode aplicar a transformação de distância em OpenCV usando o método distanceTransform(). A seguir está a sintaxe desse método.

distanceTransform(src, dst, distanceType, maskSize)

Este método aceita os seguintes parâmetros -

  • src - Um objeto da aula Mat representando a imagem de origem (entrada).

  • dst - Um objeto da aula Mat representando a imagem de destino (saída).

  • distanceType - Uma variável do tipo inteiro que representa o tipo da transformação de distância a ser aplicada.

  • maskSize - Uma variável do tipo inteiro que representa o tamanho da máscara a ser usada.

Exemplo

O programa a seguir demonstra como realizar uma operação de transformação de distância em uma determinada imagem.

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");
   }
}

Suponha que a seguir está a imagem de entrada input.jpg especificado no programa acima.

Resultado

Ao executar o programa, você obterá a seguinte saída -

Image Processed

Se você abrir o caminho especificado, poderá observar a imagem de saída da seguinte maneira -

Tipos de operações de transformação de distância

Além do tipo de operação à distância DIST_Cdemonstrado no exemplo anterior, o OpenCV atende a vários outros tipos de operações de transformação de distância. Todos esses tipos são representados por campos estáticos predefinidos (valores fixos) da classe Imgproc.

Você pode escolher o tipo de operação de transformação de distância de que precisa, passando seu respectivo valor predefinido para o parâmetro denominado distanceType do distanceTransform() método.

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

A seguir estão os valores que representam vários tipos de distanceTransform operações e seus respectivos resultados.

Operação e descrição Resultado
DIST_C
DIST_L1
DIST_L2
DIST_LABEL_PIXEL
DIST_MASK_3