Java DIP - Bildpyramiden
Die Bildpyramide ist nichts anderes als eine Methode zum Anzeigen eines Bildes mit mehreren Auflösungen. Die unterste Ebene ist eine Version des Bildes mit der höchsten Auflösung und die oberste Ebene ist eine Version des Bildes mit der niedrigsten Auflösung. Bildpyramiden werden verwendet, um Bilder in verschiedenen Maßstäben zu verarbeiten.
In diesem Kapitel führen wir einige Down- und Up-Samples für Bilder durch.
Wir gebrauchen OpenCV Funktionen pyrUp und pyrDown. Sie finden Sie unterImgprocPaket. Die Syntax ist unten angegeben -
Imgproc.pyrUp(source, destination, destinationSize);
Imgproc.pyrDown(source, destination,destinationSize);
Die Parameter werden nachfolgend beschrieben -
Sr.Nr. | Parameter & Beschreibung |
---|---|
1 | source Es ist das Quellbild. |
2 | destination Es ist das Zielbild. |
3 | destinationSize Dies ist die Größe des Ausgabebildes. Standardmäßig wird es als Größe ((src.cols * 2), (src.rows * 2)) berechnet. |
Neben den Methoden pyrUp und pyrDown gibt es weitere Methoden, die von der Imgproc-Klasse bereitgestellt werden. Sie werden kurz beschrieben -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | cvtColor(Mat src, Mat dst, int code, int dstCn) Es konvertiert ein Bild von einem Farbraum in einen anderen. |
2 | dilate(Mat src, Mat dst, Mat kernel) Es erweitert ein Bild mithilfe eines bestimmten Strukturierungselements. |
3 | equalizeHist(Mat src, Mat dst) Es gleicht das Histogramm eines Graustufenbildes aus. |
4 | filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta) Es faltet ein Bild mit dem Kernel. |
5 | GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX) Es verwischt ein Bild mit einem Gaußschen Filter. |
6 | integral(Mat src, Mat sum) Es berechnet das Integral eines Bildes. |
Beispiel
Das folgende Beispiel zeigt die Verwendung der Imgproc-Klasse zum Durchführen von Up- und Down-Sampling für ein Bild.
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
public class main {
public static void main( String[] args ) {
try{
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat source = Highgui.imread("digital_image_processing.jpg",
Highgui.CV_LOAD_IMAGE_COLOR);
Mat destination1 = new Mat(source.rows()*2, source.cols()*2,source.type());
destination1 = source;
Imgproc.pyrUp(source, destination1, new Size(source.cols()*2 source.rows()*2));
Highgui.imwrite("pyrUp.jpg", destination1);
source = Highgui.imread("digital_image_processing.jpg",
Highgui.CV_LOAD_IMAGE_COLOR);
Mat destination = new Mat(source.rows()/2,source.cols()/2, source.type());
destination = source;
Imgproc.pyrDown(source, destination, new Size(source.cols()/2, source.rows()/2));
Highgui.imwrite("pyrDown.jpg", destination);
} catch (Exception e) {
System.out.println("error: " + e.getMessage());
}
}
}
Ausgabe
Wenn Sie den angegebenen Code ausführen, wird die folgende Ausgabe angezeigt:
Original Bild
Auf dem Originalbild werden pyrUp (UP Sampling) und pyrDown (Down Sampling) ausgeführt. Die Ausgabe nach dem Abtasten ist wie unten gezeigt -