OpenCV - dylatacja
Erozja i dylatacja to dwa rodzaje operacji morfologicznych. Jak sama nazwa wskazuje, operacje morfologiczne to zbiór operacji przetwarzających obrazy zgodnie z ich kształtami.
Na podstawie podanego obrazu wejściowego opracowywany jest „element strukturalny”. Można to zrobić w dowolnej z dwóch procedur. Mają one na celu usunięcie szumów i wyrównanie niedoskonałości, aby obraz był wyraźny.
Rozszerzanie się
Ta procedura następuje po splocie z pewnym jądrem o określonym kształcie, takim jak kwadrat lub okrąg. To jądro ma punkt zakotwiczenia, który oznacza jego środek.
To jądro jest nakładane na obraz, aby obliczyć maksymalną wartość piksela. Po obliczeniu obraz zostaje zastąpiony kotwicą pośrodku. Dzięki tej procedurze obszary jasnych obszarów zwiększają się, a tym samym rozmiar obrazu.
Na przykład rozmiar obiektu w odcieniu białym lub jasnym wzrasta, podczas gdy rozmiar obiektu w odcieniu czarnym lub ciemnym maleje.
Możesz wykonać operację dylatacji na obrazie za pomocą dilate() metoda imgprocklasa. Poniżej znajduje się składnia tej metody.
dilate(src, dst, kernel)
Ta metoda akceptuje następujące parametry -
src - A Mat obiekt reprezentujący źródło (obraz wejściowy) dla tej operacji.
dst - A Mat obiekt reprezentujący miejsce docelowe (obraz wyjściowy) dla tej operacji.
kernel - A Mat obiekt reprezentujący jądro.
Przykład
Możesz przygotować macierz jądra za pomocą getStructuringElement()metoda. Ta metoda akceptuje liczbę całkowitą reprezentującąmorph_rect typ i obiekt typu Size.
Imgproc.getStructuringElement(int shape, Size ksize);
Poniższy program demonstruje, jak wykonać operację dylatacji na danym obrazie.
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");
}
}
Wejście
Załóżmy, że poniżej jest obraz wejściowy sample.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 -