Java DIP - Application du filtre de boîte

Nous appliquons un filtre Box qui brouille une image. Un filtre Box peut être de dimensions 3x3, 5x5, 9x9 etc.

Nous utilisons OpenCV fonction filter2Dpour appliquer le filtre Box 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

depth

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 à scanner à 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.

En dehors de 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 le filtre Boîte à une image en niveaux de gris.

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++) {
                  m[k] = m[k]/(kernelSize * kernelSize);
               }
               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

Dans cet exemple, nous convoluons notre image avec le filtre suivant (noyau). Ce filtre a pour effet de rendre l'image floue à mesure que sa taille augmente.

Cette image originale a été convoluée avec le filtre de boîte de taille 5, qui est donné ci-dessous -

Boîte filtre de taille 5

1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25

Image convolue (avec filtre de boîte de taille 5)

Image convolue (avec filtre de boîte de taille 9)