OpenCV - Seuil adaptatif

Dans simple thresholding, la valeur seuil est globale, c'est-à-dire qu'elle est la même pour tous les pixels de l'image. Adaptive thresholding est la méthode dans laquelle la valeur de seuil est calculée pour des régions plus petites et, par conséquent, il y aura différentes valeurs de seuil pour différentes régions.

Dans OpenCV, vous pouvez effectuer une opération de seuil adaptatif sur une image à l'aide de la méthode adaptiveThreshold() du Imgprocclasse. Voici la syntaxe de cette méthode.

adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

Cette méthode accepte les paramètres suivants -

  • src - Un objet de la classe Mat représentant l'image source (entrée).

  • dst - Un objet de la classe Mat représentant l'image de destination (sortie).

  • maxValue - Une variable de type double représentant la valeur à donner si la valeur du pixel est supérieure à la valeur seuil.

  • adaptiveMethod- Une variable de type entier représentant la méthode adaptative à utiliser. Ce sera l'une des deux valeurs suivantes

    • ADAPTIVE_THRESH_MEAN_C - la valeur seuil est la moyenne de la superficie du quartier.

    • ADAPTIVE_THRESH_GAUSSIAN_C - la valeur seuil est la somme pondérée des valeurs de voisinage où les poids sont une fenêtre gaussienne.

  • thresholdType - Une variable de type entier représentant le type de seuil à utiliser.

  • blockSize - Une variable de type entier représentant la taille du pixel voisinage utilisée pour calculer la valeur seuil.

  • C - Une variable de type double représentant la constante utilisée dans les deux méthodes (soustraite de la moyenne ou moyenne pondérée).

Exemple

Le programme suivant montre comment effectuer une opération de seuil adaptatif sur une image dans OpenCV. Ici, nous choisissons un seuil adaptatif de typebinary et ADAPTIVE_THRESH_MEAN_C pour la méthode du seuil.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class AdaptiveThresh {
   public static void main(String args[]) throws Exception {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      // Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap14/thresh_input.jpg";
      
      // Reading the image
      Mat src = Imgcodecs.imread(file,0);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();

      Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C,
         Imgproc.THRESH_BINARY, 11, 12);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap14/Adaptivemean_thresh_binary.jpg", dst);

      System.out.println("Image Processed");
   } 
}

Supposons que ce qui suit est l'image d'entrée thresh_input.jpg spécifié dans le programme ci-dessus.

Production

Lors de l'exécution du programme, vous obtiendrez la sortie suivante -

Image Processed

Si vous ouvrez le chemin spécifié, vous pouvez observer l'image de sortie comme suit -

Autres types de seuils adaptatifs

En plus de ADAPTIVE_THRESH_MEAN_C comme méthode adaptative et THRESH_BINARY comme type de seuil comme démontré dans l'exemple précédent, nous pouvons choisir plus de combinaisons de ces deux valeurs.

Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 11, 12);

Voici les valeurs représentant diverses combinaisons de valeurs pour les paramètres adaptiveMethod et thresholdType et leurs résultats respectifs.

adaptiveMethod / thresholdType ADAPTIVE_THRESH_MEAN_C ADAPTIVE_THRESH_GAUSSIAN_C:
THRESH_BINARY
THRESH_BINARY_INV