2009-08-15 6 views
1

J'utilise mon appareil photo numérique comme un scanner rapide et sale. La résolution est en fait d'environ 300 dpi, ce qui est tout à fait raisonnable. Mais mon appareil photo produit une image en couleur, que je veux réduite à un bitmap. Je fais pas voulez faire un tramage de l'image; Je cherche ce que j'obtiendrais si je passais le document dans un scanner noir et blanc. Convertir un JPEG en une image en niveaux de gris est facile et standard en utilisant djpeg -grayscale. La partie difficile est de décider quels pixels gris doivent être blancs et lesquels doivent être noirs.Comment définir un seuil lors de la conversion de JPEG en bitmap non tramé?

Les outils pbmplus offrent

djpeg -grayscale -pnm img.jpg | pgmtopbm -threshold -value $v > img.pbm 

Mais le tueur est que la valeur $v. Les bonnes valeurs semblent varier de 0,3 à 0,6, et les essais et les erreurs répétées à la main me tue. (Pour ceux qui sont plus familiers avec ImageMagick, le $v à portée de main est la valeur du paramètre -black-threshold.)

Je suppose que je pourrais construire une interface graphique qui m'aiderait à trouver un seuil plus rapidement à la main, mais ce que je cherche vraiment pour est et algorithme pour définir le seuil pour convertir une image en niveaux de gris en bitmap propre. Idéalement, cela fonctionnerait simplement en examinant la structure de l'image en niveaux de gris!

Répondre

0

Ce n'est pas exactement ce que j'avais espéré, mais le programme mkbitmap du projet potrace fait un bon travail de conversion en images bitmaps. Il a tendance à avoir quelques artefacts sur les bords, mais il fait un bien meilleur travail en éliminant le signal à faible fréquence spatiale non pertinent, ce qui n'est pas possible en utilisant un seuillage simple.

0

La conversion d'espace colorimétrique est normalement effectuée à l'aide de profils dépendants du périphérique.

Votre appareil photo produit une image en fonction de son profil de couleur et, si vous possédez un scanner, il produira une image correspondant à son profil de couleur. Si vous aviez un profil ICC ou ICM pour votre appareil photo et un profil proche de la sortie de votre dispositif de scanner hypothétique, vous pouvez utiliser ImageMagick ou Little CMS pour appliquer les profils à vos données.

Puisque je doute que vous ayez un profil ICC ou ICM pour votre caméra, vous pouvez simplement choisir l'un des the many free ones available on the Internet. Un profil de sortie en échelle de gris approprié peut être un peu plus difficile à trouver.

Si vous ne pouvez pas appliquer des profils spécifiques à l'appareil, vous pouvez trouver cette commande ImageMagick can do what you need with it's -colorspace.

Le ICC (International Color Consortium) a quelques programmes et informations que vous pouvez trouver utiles.

algorithme pour définir le seuil pour convertir une image bitmap à un niveau de gris propre

Si tout le reste échoue, vous pourriez être en mesure de tirer une valeur de l'histogramme d'une image en niveaux de gris?

(Votre message est un peu déroutant lorsque vous indiquez que votre caméra génère une image en couleur mais que vous souhaitez que cette image apparaisse comme si elle avait été scannée en noir et blanc. une image en niveaux de gris à un bitmap « propre » « S'il vous plaît préciser)

Edition -.. Si vous cherchez toujours une réponse, ImageMagick peut être utilisé pour appliquer un profil ICC également this page of scanner profile info peut être d'une certaine aide. .

convert RGB.jpg -profile "Scanner.icc" BW.jpg 
+0

Obtenir des niveaux de gris ne pose aucun problème. J'ai clarifié cela et ajouté un exemple ImageMagick. La question est de savoir comment trouver la valeur de seuil. Je suis sûr que regarder un histogramme pourrait aider. Mais alors quoi? –

+0

Sans un type de rééchantillonnage (bicubique, linéaire, etc.) je ne sais pas s'il existe une formule. Il y a plusieurs éléments de données qui peuvent être déduits de l'histogramme comme la gamme de valeurs réelles et les valeurs réelles elles-mêmes. De là, vous êtes seul. Ce lien pourrait vous aider: http://stackoverflow.com/questions/1173200/need-c-function-to-convert-grayscale-tiff-to-black-white-monochrome-1bpp-tif –

+0

Je suis corrigé qu'il ne rééchantillonne pas quantification de couleur. http://en.wikipedia.org/wiki/Color_quantization –

Questions connexes