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 |