Java DIP - operator Kirscha
Maski kompasu Kirscha to kolejny rodzaj maski pochodnej, która jest używana do wykrywania krawędzi. Ten operator jest również znany jako maska kierunku. W tym operatorze bierzemy jedną maskę i obracamy ją we wszystkich ośmiu kierunkach kompasu, aby uzyskać krawędzie ośmiu kierunków.
Będziemy używać OpenCV funkcjonować filter2Daby zastosować operator Kirscha do obrazów. Można go znaleźć podImgprocpakiet. Jego składnia jest podana poniżej -
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Argumenty funkcji opisano poniżej -
Sr.No. | Argument |
---|---|
1 | src To jest obraz źródłowy. |
2 | dst To jest obraz docelowy. |
3 | depth To jest głębia zachodu słońca. Wartość ujemna (taka jak -1) wskazuje, że głębokość jest taka sama jak źródło. |
4 | kernel Jest to jądro, które ma zostać zeskanowane poprzez obraz. |
5 | anchor Jest to pozycja kotwicy względem jej jądra. Punkt lokalizacji (-1, -1) domyślnie wskazuje środek. |
6 | delta Jest to wartość dodawana do każdego piksela podczas splotu. Domyślnie jest to 0. |
7 | BORDER_DEFAULT Domyślnie pozwalamy na tę wartość. |
Oprócz metody filter2D () istnieją inne metody udostępniane przez klasę Imgproc. Są one krótko opisane -
Sr.No. | Metoda i opis |
---|---|
1 | cvtColor(Mat src, Mat dst, int code, int dstCn) Konwertuje obraz z jednej przestrzeni kolorów na inną. |
2 | dilate(Mat src, Mat dst, Mat kernel) Rozszerza obraz za pomocą określonego elementu strukturyzującego. |
3 | equalizeHist(Mat src, Mat dst) Wyrównuje histogram obrazu w skali szarości. |
4 | filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta) Łączy obraz z jądrem. |
5 | GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX) Rozmywa obraz za pomocą filtra Gaussa. |
6 | integral(Mat src, Mat sum) Oblicza całkę obrazu. |
Przykład
Poniższy przykład ilustruje użycie klasy Imgproc do zastosowania operatora Kirscha do obrazu w skali szarości.
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
public class convolution {
public static void main( String[] args ) {
try {
int kernelSize = 9;
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat source = Highgui.imread("grayscale.jpg", Highgui.CV_LOAD_IMAGE_GRAYSCALE);
Mat destination = new Mat(source.rows(),source.cols(),source.type());
Mat kernel = new Mat(kernelSize,kernelSize, CvType.CV_32F) {
{
put(0,0,-3);
put(0,1,-3);
put(0,2,-3);
put(1,0-3);
put(1,1,0);
put(1,2,-3);
put(2,0,5);
put(2,1,5);
put(2,2,5);
}
};
Imgproc.filter2D(source, destination, -1, kernel);
Highgui.imwrite("output.jpg", destination);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Wynik
Po wykonaniu podanego kodu widoczne są następujące dane wyjściowe -
Oryginalny obraz
Ten oryginalny obraz jest spleciony z operatorem Kirscha wschodnich krawędzi, który jak podano poniżej -
Kirsch East
-3 | -3 | -3 |
-3 | 0 | -3 |
5 | 5 | 5 |
Convolved Image (Kirsch East)
Ten oryginalny obraz jest spleciony z operatorem Kirscha krawędzi południowo-zachodnich, który jak podano poniżej -
Kirsch South West
5 | 5 | -3 |
5 | 0 | -3 |
-3 | -3 | -3 |