Seuillage automatique

auto_threshold(image: np.ndarray, roi_size: int = 7, max_iterations: int = 4) float

Calcule un seuil automatique basé sur la segmentation de l’image en utilisant une bibliothèque DLL externe.

Cette fonction applique une segmentation itérative à l’image en exploitant la méthode PALM (Point Accumulation for Localized Mean). L’objectif est d’affiner progressivement un seuil basé sur l’écart type des pixels non segmentés.

Paramètres:
  • image (np.array) – Image en niveaux de gris sous forme de tableau NumPy 2D.

  • roi_size (int) – Taille des régions d’intérêt (ROI) utilisées pour la segmentation. Défaut : 7.

  • max_iterations (int) – Nombre maximal d’itérations pour l’affinement du seuil. Défaut : 4.

Renvoie:

Seuil calculé après convergence (écart type des pixels non segmentés).

Type renvoyé:

float

Algorithme

L’algorithme fonctionne en plusieurs étapes :

  1. Initialisation :

    • Création d’un masque vide (même taille que l’image, rempli de zéros).

    • Calcul de l’écart type initial de l’image (\(\sigma = \sqrt{\frac{1}{N} \sum_{i=1}^{N} (x_i - \bar{x})^2}\)).

    • Définition de la demi-taille de la région d’intérêt (roi_size).

  2. Segmentation itérative :

    • Lancement de la fonction PALM de la DLL pour détecter des points caractéristiques avec les paramètres suivants :
      • Le seuil est égal à l’écart-type calculé.

      • Le watershed est désactivé.

      • Le fit Gaussien est désactivé.

      • Sigma vaut 1.

      • Theta vaut \(\pi / 4\).

    • Mise à jour du masque en activant les pixels correspondant aux régions détectées (ROI autour de chaque points détectés).

    • Recalcule de l’écart type sur les pixels hors segmentation.

    • Répétition jusqu’à max_iterations ou convergence.

  3. Critère d’arrêt :

    • Si tous les pixels sont segmentés avant la fin des itérations, la boucle s’arrête prématurément. Cela n’est possible que si les points détectés et leur zone d’intérêt couvrent l’intégralité de l’image.

Exemple d’utilisation

Voici un exemple d’utilisation de la fonction :

import ctypes
import numpy as np
from palm_tracer.Processing import Palm

# Utilisation de PALM et Chargement de la DLL
palm = Palm()

# Image factice 100x100 avec des valeurs aléatoires
image = np.random.randint(0, 255, (100, 100), dtype=np.uint8)

# Calcul du seuil
seuil = palm.auto_threshold(image)

print(f"Seuil calculé : {seuil}")

Remarques

  • L’utilisation de la DLL est essentielle au bon fonctionnement de cette fonction.

  • La performance dépend de la taille de l’image et du nombre d’itérations.

  • L’approche PALM permet une segmentation robuste sur des images bruitées.