Java DIP - Weighted Average Filter
Im Filter für gewichtete Durchschnittswerte haben wir dem Mittelwert mehr Gewicht gegeben, wodurch der Beitrag des Zentrums größer wird als der Rest der Werte. Aufgrund der gewichteten Durchschnittsfilterung können wir die Unschärfe des Bildes steuern.
Wir gebrauchen OpenCV Funktion filter2Dum gewichteten Durchschnittsfilter auf Bilder anzuwenden. Es kann unter gefunden werdenImgprocPaket. Die Syntax ist unten angegeben -
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Die Funktionsargumente werden unten beschrieben -
Sr.Nr. | Argument & Beschreibung |
---|---|
1 | src Es ist ein Quellbild. |
2 | dst Es ist ein Zielbild. |
3 | ddepth Es ist die Tiefe von dst. Ein negativer Wert (z. B. -1) zeigt an, dass die Tiefe der Quelle entspricht. |
4 | kernel Es ist der Kernel, der durch das Bild gescannt werden soll. |
5 | anchor Dies ist die Position des Ankers relativ zu seinem Kernel. Der Positionspunkt (-1, -1) gibt standardmäßig die Mitte an. |
6 | delta Dies ist ein Wert, der während der Faltung zu jedem Pixel hinzugefügt wird. Standardmäßig ist es 0. |
7 | BORDER_DEFAULT Wir lassen diesen Wert standardmäßig. |
Neben der filter2D () -Methode gibt es andere 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 Anwenden eines gewichteten Durchschnittsfilters auf ein Bild von Graycale.
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 = Mat.ones(kernelSize,kernelSize, CvType.CV_32F) {
for(int i=0; i<kernel.rows(); i++) {
for(int j=0; j<kernel.cols(); j++) {
double[] m = kernel.get(i, j);
for(int k =0; k<m.length; k++) {
if(i==1 && j==1) {
m[k] = 10/18;
}
else{
m[k] = m[k]/(18);
}
}
kernel.put(i,j, m);
}
}
};
Imgproc.filter2D(source, destination, -1, kernel);
Highgui.imwrite("output.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
Dieses Originalbild wird mit dem unten angegebenen gewichteten Durchschnittsfilter gefaltet -
Gewichteter Durchschnittsfilter
1 | 1 | 1 |
1 | 10 | 1 |
1 | 1 | 1 |