Comment binarisez-vous une image colorée?

14

Mon ami a une image colorée avec une écriture chinoise (essentiellement en prenant une photo ou en scannant ce qu'il a écrit sur une feuille de papier blanc), et il aimerait que je la convertisse en une image binaire en noir et blanc. Existe-t-il des applications sous Ubuntu qui peuvent accomplir cela?

Voici un exemple d'image:

entrez la description de l'image ici

Tim
la source

Réponses:

27

Ce que vous voulez est appelé "seuil" dans le traitement d'image. Fondamentalement, il prend une image en entrée et produit une image dont tous les pixels ont une valeur inférieure à un seuil donné définie sur noir et tous les pixels dont la valeur est supérieure au seuil défini sur blanc. Il en résulte une image en noir et blanc à partir d'une image d'entrée arbitraire.

En règle générale, vous souhaitez d'abord convertir en niveaux de gris pour des résultats plus prévisibles, mais il est également possible de définir un seuil pour une image en couleur.

Vous pouvez utiliser un outil graphique tel que GIMP pour le faire de manière interactive (vous trouverez l'outil via le menu principal -> Couleurs -> Seuil), ou vous pouvez utiliser ImageMagick quelque chose comme ceci:

convert colored.png -threshold 75% thres_colored.png

L'exécution de la commande ci-dessus sur l'image d'exemple produit le résultat ci-dessous.

Version en noir et blanc de l'image OP

Étant donné que le seuillage est souvent un processus d'essai et d'erreur pour obtenir un résultat qui vous convient, en particulier si l'image source n'est pas déjà très proche du noir et blanc, je recommande l'approche GUI si possible, mais si ce n'est pas une option pour une raison quelconque, vous pouvez également le faire via la ligne de commande. Pour un contrôle plus fin de la sortie, vous pouvez d'abord utiliser des outils tels que les courbes de couleur, les niveaux et le contraste pour mieux isoler les parties claires et sombres de l'image avant le seuillage. (En fait, le seuil peut être considéré comme un cas extrême d'utilisation de l'outil Courbes de couleurs.)

un CVn
la source
2
Merci! Puisqu'une image colorée a trois canaux RBG, à quoi s'applique / peut s'appliquer le seuil en général?
Tim
@Tim Cela dépend probablement du logiciel, mais je m'attendrais à ce que le seuil (sauf si vous spécifiez par canal ou pour un canal spécifique, voir par exemple l' -channeloption de conversion d'ImageMagick ) soit appliqué à une sorte de "valeur" du pixel, qui est calculée de tous les canaux. C'est la raison pour laquelle j'ai dit que vous souhaitiez peut-être d'abord convertir en niveaux de gris pour des résultats plus prévisibles. (Voir aussi mon montage.)
un CVn le
Merci! Existe-t-il une documentation sur ce à quoi le seuil s'applique dans la commande affichée dans votre message?
Tim
@Tim Pas vraiment. Je m'attendais à ce que la conversion prenne un pourcentage de la valeur maximale (qui aurait dû être 256 par canal) ou une valeur spécifique, mais je n'ai pu obtenir un résultat utile qu'en spécifiant un pourcentage. Lorsque vous le faites avec un outil graphique, y compris GIMP, vous aurez généralement un histogramme qui montre la distribution tonale de l'image; ce sera une grande aide pour choisir la bonne valeur. Utiliser uniquement la ligne de commande, sauf si vous avez une raison spécifique de le faire, est probablement plus problématique que cela en vaut vraiment la peine.
un CVn du
2
En remarque, il existe d'autres méthodes de seuillage qui ne doivent pas s'appuyer sur un niveau de seuil codé en dur. Par exemple, ImageMagick inclut -latqui effectue un seuil adaptatif local, en tenant compte des pixels environnants.
voithos
7

Vous pouvez utiliser Imagemagick:

convert test.png -colorspace Gray gray_colorspace.png

D' ici .

Voici ce que j'ai obtenu après avoir appliqué votre image:

entrez la description de l'image ici

mkc
la source
10
"Binaire" vient de "bi" qui signifie "deux", donc je suppose que l'OP veut convertir l'image en noir et blanc pur. La conversion en niveaux de gris donne bien plus que deux niveaux.
un CVn le
D'accord! est logique, +1.
mkc
2

-monochrome d'ImageMagick est une option qui utilise un tramage intelligent et rend la sortie beaucoup plus visible que-thresholdsi vous la destinez à la consommation humaine:

convert -monochrome signature.png out.png

entrez la description de l'image ici

Cela ne fait pas beaucoup de différence pour une image aussi simple, mais pour les plus grandes, c'est frappant.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
1

Vous pouvez également le faire facilement avec la netpbmboîte à outils:

anytopnm inputfile | ppmtopgm | pgmtopbm > outputfile

ppmtopgmconvertit en une image en niveaux de gris, se pgmtopbmconvertit en une image en noir ou blanc, puis nous redirigeons la sortie vers un fichier. Ce sera au format pbm; si vous voulez quelque chose de plus commun, vous devrez ajouter un convertisseur de sortie (par exemple, pnmtopngou quelque chose comme ça )

Wouter Verhelst
la source