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

Gefaltetes Bild