Java DIP - Filtre moyen pondéré

Dans le filtre moyen pondéré, nous avons donné plus de poids à la valeur centrale, grâce à laquelle la contribution du centre devient plus importante que le reste des valeurs. Grâce au filtrage moyen pondéré, nous pouvons contrôler le flou de l'image.

Nous utilisons OpenCV fonction filter2Dpour appliquer un filtre moyen pondéré aux images. Il peut être trouvé sousImgprocpaquet. Sa syntaxe est donnée ci-dessous -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

Les arguments de la fonction sont décrits ci-dessous -

N ° Sr. Argument et description
1

src

C'est l'image source.

2

dst

C'est l'image de destination.

3

ddepth

C'est la profondeur de dst. Une valeur négative (telle que -1) indique que la profondeur est la même que la source.

4

kernel

C'est le noyau à numériser à travers l'image.

5

anchor

C'est la position de l'ancre par rapport à son noyau. Le point de localisation (-1, -1) indique le centre par défaut.

6

delta

C'est une valeur à ajouter à chaque pixel lors de la convolution. Par défaut, il est 0.

sept

BORDER_DEFAULT

Nous laissons cette valeur par défaut.

Outre la méthode filter2D (), il existe d'autres méthodes fournies par la classe Imgproc. Ils sont décrits brièvement -

N ° Sr. Méthode et description
1

cvtColor(Mat src, Mat dst, int code, int dstCn)

Il convertit une image d'un espace colorimétrique à un autre.

2

dilate(Mat src, Mat dst, Mat kernel)

Il dilate une image en utilisant un élément structurant spécifique.

3

equalizeHist(Mat src, Mat dst)

Il égalise l'histogramme d'une image en niveaux de gris.

4

filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta)

Il convolve une image avec le noyau.

5

GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX)

Il brouille une image à l'aide d'un filtre gaussien.

6

integral(Mat src, Mat sum)

Il calcule l'intégrale d'une image.

Exemple

L'exemple suivant illustre l'utilisation de la classe Imgproc pour appliquer un filtre moyen pondéré à une image de 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());
      }
   }
}

Production

Lorsque vous exécutez le code donné, la sortie suivante est vue -

Image originale

Cette image originale est convoluée avec le filtre moyen pondéré comme indiqué ci-dessous -

Filtre moyen pondéré

1 1 1
1 dix 1
1 1 1

Image convoluée