2009-12-09 5 views
9

Quelle est la meilleure façon de déterminer automatiquement le meilleur seuil pour convertir une image en niveaux de gris en noir et blanc? Je peux trouver d'assez bonnes valeurs de seuil à la main, mais je voudrais automatiser le choix de la valeur de seuil. Edit: J'ai lu un peu sur ce problème, et en regardant l'histogramme pour l'image peut aider, par exemple. si l'image a un histogramme bimodal, choisir un seuil entre les modes semble raisonnable. Cependant, pour les histogrammes multimodaux ou plats, cela semble plus compliqué. Donc je pense que j'ai encore plus de lecture à faire. Merci à tous ceux qui ont répondu!Meilleur seuil pour convertir les niveaux de gris en noir et blanc

Répondre

5

0,5 finit généralement par perdre beaucoup d'informations à moins que l'image originale soit extrêmement brillante. En fait, tout seuil absolu gâchera un type d'image ou un autre.

Une meilleure méthode serait de faire un histogramme des luminosités et de choisir un seuil près du mode. Cela devrait fonctionner mieux sur la plupart des images que n'importe quel seuil absolu.

+0

Désolé, mais pouvez-vous expliquer, que voulez-vous dire quand vous dites: "choisir un seuil près du mode"? – maximus

+0

Le mode est la luminosité qui apparaît le plus fréquemment dans l'image. –

+0

Pour référence future, le mode est la moyenne. – cxdf

1

Quels sont vos critères pour un "bon" seuil? Vous voudrez peut-être commencer avec l'intensité moyenne des niveaux de gris de l'image ...

1

Je pense que le seuil dépend de l'obscurité moyenne (ou la distribution des couleurs) sur chaque image indépendamment. Si vous allez avec une valeur arbitraire, alors vous finirez par perdre beaucoup de données si l'image a commencé à être assez délavée.

De même, vous pouvez émuler certaines des nuances de gris en remplissant peu souvent une zone en noir et blanc. 50% de gris est un damier tous les autres, 75% vous colorez la moitié des carrés blancs restants, 25% vous inversez le noir et blanc, etc.

Je ne pense pas qu'il y ait une réponse fixe pour cette question sans considérer chaque image individuellement.

1

La mise en demi-teinte basée sur le seuil entraîne généralement de nombreuses pertes d'informations. Selon le but, vous pouvez envisager dithering. J'aime le look du filtre Stucki, car il est tranchant et préserve les détails. Here's a C# project qui implémente l'algorithme. Vous pouvez télécharger la source si vous étiez intéressé.

3

Je voudrais examiner un algorithme de seuillage adaptatif. Un tel, qui n'est pas très difficile à mettre en œuvre est Otsus method. Il fonctionne en supposant que vous avez des pixels de premier plan et des pixels de fond et tente de trouver la meilleure séparation entre eux.

3

Le K-Means Clustering Method fonctionne très bien si vous effectuez les opérations suivantes:

  1. Partitionnement l'image en sous-blocs.
  2. Appliquer le clustering K-Means sur chaque sous-bloc. Le résultat est une image binaire (Supposons que vous vouliez '1' et le reste '0').
  3. Refaites l'étape 2, cette fois sur des blocs qui se chevauchent.
  4. Appliquer l'opérateur 'AND' sur les sous-images (pour les sous-blocs superposés).

C'est vraiment facile à faire dans Matlab.
Si nécessaire, je peux partager le code.

Questions connexes