OpenCV - Transformacja odległości
Plik distance transformoperator zazwyczaj przyjmuje obrazy binarne jako dane wejściowe. W tej operacji intensywność szarości punktów wewnątrz obszarów pierwszego planu jest zmieniana w celu oddalenia ich odpowiednich odległości od najbliższej wartości 0 (granicy).
Możesz zastosować transformację odległości w OpenCV za pomocą metody distanceTransform(). Poniżej znajduje się składnia tej metody.
distanceTransform(src, dst, distanceType, maskSize)
Ta metoda akceptuje następujące parametry -
src - Przedmiot z klasy Mat reprezentujący obraz źródłowy (wejściowy).
dst - Przedmiot z klasy Mat reprezentujący obraz docelowy (wyjściowy).
distanceType - zmienna typu integer reprezentująca typ zastosowanej transformacji odległości.
maskSize - zmienna typu całkowitego reprezentująca rozmiar maski, która ma być używana.
Przykład
Poniższy program demonstruje, jak wykonać operację transformacji odległości na danym obrazie.
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");
}
}
Załóżmy, że poniżej jest obraz wejściowy input.jpg określone w powyższym programie.
Wynik
Podczas wykonywania programu otrzymasz następujący wynik -
Image Processed
Jeśli otworzysz określoną ścieżkę, możesz obserwować obraz wyjściowy w następujący sposób -
Rodzaje operacji przekształcania odległości
Oprócz typu operacji na odległość DIST_Cpokazane w poprzednim przykładzie, OpenCV obsługuje różne inne typy operacji przekształcania odległości. Wszystkie te typy są reprezentowane przez predefiniowane pola statyczne (wartości stałe) klasy Imgproc.
Możesz wybrać typ operacji transformacji odległości, której potrzebujesz, przekazując odpowiednią wstępnie zdefiniowaną wartość do nazwanego parametru distanceType z distanceTransform() metoda.
// Applying distance transform
Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C, 3);
Poniżej przedstawiono wartości reprezentujące różne typy plików distanceTransform operacje i ich odpowiednie wyniki.
Działanie i opis | Wynik |
---|---|
DIST_C |
|
DIST_L1 |
|
DIST_L2 |
|
DIST_LABEL_PIXEL |
|
DIST_MASK_3 |
|