1

私はデジタル カメラを手早く汚れたスキャナーとして使用しています。解像度は実際には約 300dpi で、かなり妥当です。しかし、私のカメラはカラー画像を生成し、それをビットマップに縮小したいと考えています。画像をディザリングしたくありません。ドキュメントを白黒スキャナーに通した場合に得られるものを探しています。JPEG をグレースケール イメージに変換するのは簡単で、djpeg -grayscale. 難しい部分は、どの灰色のピクセルを白にすべきか、どの灰色のピクセルを黒にすべきかを決定することです。

pbmplus ツールが提供するもの

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

しかし、キラーはその値$vです。適切な値は 0.3 から 0.6 の範囲のようで、手作業で試行錯誤を繰り返すのは私を苦しめています。(ImageMagick に詳しい人にとっては$v、手元にあるのは-black-thresholdパラメーターの値です。)

手でしきい値をより速く見つけるのに役立つGUIを構築できると思いますが、私が本当に探しているのは、しきい値を設定してグレースケール画像をきれいなビットマップに変換するアルゴリズムです。理想的には、これはグレースケール画像の構造を調べるだけで機能します!

4

2 に答える 2

0

色空間の変換は通常、デバイス依存のプロファイルを使用して行われます。

カメラはそのカラー プロファイルに従って画像を生成しています。スキャナーがあれば、そのカラー プロファイルに従って画像を生成します。

カメラの ICC または ICM プロファイルがあり、仮想のスキャナー デバイスの出力にほぼ一致するプロファイルがあれば、ImageMagickまたはLittle CMSを使用してプロファイルをデータに適用できます。

あなたのカメラに ICC または ICM プロファイルがあるとは思えないので、インターネットで入手できる多くの無料のものから 1 つを選択するだけでよいでしょう。適切なグレースケール出力プロファイルを見つけるのは少し難しいかもしれません。

デバイス固有のプロファイルを適用できない場合は、 ImageMagick が -colorspaceコマンドで必要なことを実行できることに気付くかもしれません。

ICC (International Color Consortium)には、役に立つと思われるプログラムや情報がいくつかあります。

グレースケール画像をきれいなビットマップに変換するためのしきい値を設定するアルゴリズム

他のすべてが失敗した場合、グレースケール画像のヒストグラムから値を導き出すことができるでしょうか?

(あなたの投稿は、カメラがカラー画像を出力すると述べているため、少し混乱していますが、その画像を白黒スキャナーで実行したかのように表示したいと考えています。その後、グレースケール画像を次のように変換するアルゴリズムが必要だと述べています。 「きれいな」ビットマップ」 明確にしてください。)

編集- まだ答えを探している場合は、ImageMagick を使用して ICC プロファイルを適用できます。また、スキャナ プロファイル情報のこのページも役立つ場合があります。

convert RGB.jpg -profile "Scanner.icc" BW.jpg
于 2009-08-15T20:06:00.100 に答える
0

これはまさに私が望んでいたものではありませんが、 potracemkbitmapプロジェクトのプログラムは、写真をビットマップに変換するのにうまく機能します。エッジにいくつかのアーティファクトが発生する傾向がありますが、単純なしきい値処理では不可能な、無関係な低空間周波数信号を除去するのにはるかに優れています。

于 2013-04-17T01:09:03.743 に答える