5

私は自分のカメラをスキャナーにしようとしています: 印刷されたテキストの写真を撮り、それらをビットマップに変換します (そして、djvuと OCR に変換します)。どのピクセルが白で、どのピクセルが黒であるかのしきい値を計算する必要がありますが、不均一な照明が原因で苦労しています。たとえば、中央のピクセルが十分に暗い場合、コーナーに黒いピクセルが集まってしまう可能性があります。

私がやりたいことは、比較的単純な仮定の下で、しきい値処理の前に不均一な照明を補正することです。より正確に:

  • 1 つまたは 2 つの光源を想定します。1 つは表面全体で光強度が徐々に変化するもの (環境光) で、もう 1 つは逆二乗 (直接光) です。

  • 紙の白い部分はすべて同じ反射率/アルベド/何であれ同じであると仮定します。

  • 各ピクセルの照度を推定するアルゴリズムを見つけ、そこから各ピクセルの反射率を復元します。

  • ピクセルの反射率から、白か黒かを分類する

これを行うアルゴリズムの書き方がわかりません。照明を推定するときに暗いピクセルを無視したいので、最小二乗フィッティングに頼りたくありません。また、アルゴリズムが機能するかどうかもわかりません。

役立つアドバイスはすべて支持されます。


編集:私は間違いなく、画像を十分に大きい断片に切り刻むことを検討しました。これにより、「白い背景のテキスト」のように見えますが、単一の断片の照明が多かれ少なかれ均一になるように十分に小さくなります。次に、サブイメージの境界を越えて不連続性がないようにしきい値を補間すると、おそらく中途半端なものが得られると思います。これは良い提案であり、試してみる必要がありますが、それでも白と黒の境界線をどこに引くかという問題が残ります。さらに考えますか?


EDIT : これは、さまざまなヒストグラムと、各ヒストグラムの「最適な」しきい値 (手動で選択) を示す GIMP からのスクリーン ダンプです。3 つのうち 2 つでは、画像全体の単一のしきい値で十分です。ただし、3 番目の例では、左上隅に別のしきい値が必要です。

4

10 に答える 10

5

この間ずっと解決策が必要かどうかはわかりませんが、必要な場合は. 数年前、私と私のチームはカメラで約 250,000 ページを撮影し、それらを (ほぼ白黒の) グレースケール画像に変換し、それを DjVued (PDF も作成) しました。

(ポンディシェリのフランス研究所の 1144 の紙の写しのカタログと写真の複製の完全なコレクションを参照してください。)

また、照明ムラの問題もありました。私たちは、実際には非常にうまく機能するシンプルで洗練されていないソリューションを思いつきました. このソリューションは、グレースケールではなく白黒の画像を作成する場合にも機能するはずです (後で説明します)。

  1. カメラと照明の設定

    a) ページをまったく同じ位置に保つために、テーブルの上部に空の額縁をテープで貼り付けました。

    b) カメラを三脚の上に置き、テープで留めた額縁を下に向け、カメラの上に外部フラッシュ ホルダーを取り付け、2 つの「モデリング ライト」を取り付けました。 . これらは、良いカメラ店で購入できます。それらは均一な照明を提供するように設計されています。各モデリング ライトの周りに小さな段ボール箱を置いて、カメラをライトから遮光しました。グレースケールで撮影し、さらに処理しました。(私たちのページは青インクで書かれた古い茶色の紙だったので、あなたのケースはもっと簡単なはずです)。

  2. 画像の処理

    フリー ソフトウェア パッケージirfanviewを使用しました。

    このソフトウェアには、色補正、ビット深度の変更、および画像のトリミングを同時に実行できるバッチ モードがあります。ページの写真を撮り、インタラクティブ モードで明るさ、コントラスト、ガンマの設定を調整して、白黒に近づけます。(グレースケールを使用しましたが、ビット深度を 2 に設定すると、すべてのページをバッチ処理するときに白黒になります。) 最適な色補正を決定した後、1 つの画像をインタラクティブにトリミングし、トリミング設定を書き留めました。次に、これらすべての設定をバッチ モード ウィンドウで設定し、1 冊の本のページを処理しました。

  3. DjVu 画像の作成。

    無料のDjVu Solo 3.1を使用して DjVu 画像を作成しました。これには、DjVu イメージを作成するためのいくつかのモードがあります。白黒画像を作成するモードは、写真にはうまく機能しませんでしたが、「写真」モードは機能しました.

    OCR は使用しませんでしたが (画像は手書きのサンスクリット語だったため)、文字が均一に照らされている限り、OCR ソフトウェアは見開き 2 ページの間のような大きな黒い領域を無視する必要があると思います。しかし、見開き 2 ページの間または端の黒い部分は、左側のページで 1 回、右側のページで 1 回、ページを 2 回トリミングすることでいつでも取り除くことができます。その後、正しい順序でページを再マージできます。つまり、左側のページは page-xxxA、右側のページは page-xxxB のようにページの名前を変更すると、ページは名前で正しく並べ替えられます。

それでも解決策が必要な場合は、上記のいくつかが役立つことを願っています。

于 2011-11-10T04:03:20.977 に答える
2

カメラのキャリブレーションをお勧めします。照明設定が固定されており(つまり、ライトが画像間を移動しない)、カメラがグレースケール(カラーではない)であることを考慮してください。

「スキャナー」の作業可能領域全体を覆う白い紙の写真を撮ります。この画像を保存すると、各ピクセルのホワイトペーパーがわかります。これで、スキャンするドキュメントの写真を撮るときに、しきい値を実行する前に、「白い参照画像」と照明をリロードできます。

白の基準REF、画像DOC、均一照明画像EVEN、およびピクセルMAXの最大値(8ビットイメージングの場合は255)と呼びましょう。ピクセルごと:

EVEN = DOC * (MAX/REF)

ノート:

  • 括弧に注意してください。ほとんどの画像処理ライブラリは、ピクセル値の計算を実行するために画像ピクセルタイプを使用し、単純な乗算はピクセルを過負荷にします。最終的には、ループを自分で記述し、中間計算に32ビット整数を使用します。
  • 白い参照画像は、プロセスで使用する前にスムージングできます。どんなスムージングまたはブラーフィルターでもかまいません。積極的に適用することを躊躇しないでください。
  • 上記の式のMAX値は、結果の画像のターゲットピクセル値を表します。最大ピクセル値を使用すると明るい白がターゲットになりますが、この値を調整して明るいグレーをターゲットにすることができます。
于 2009-11-28T08:22:46.693 に答える
1

白い背景に(比較的)小さな黒い文字の画像を撮っていると思います。

1 つのアプローチは、背景の照明の変化を維持しながら、小さな黒いオブジェクトを「削除」することです。これにより、画像がどのように照らされているかが推定され、元の画像を正規化するために使用できます。多くの場合、元の画像から照明推定を差し引いてから、しきい値ベースのセグメンテーションを行うだけで十分です。このアプローチはグレー スケール形態学的フィルターに基づいており、以下のように matlab で実装できます。

img = imread('filename.png');
illumination = imclose(img, strel('disk', 10)); 
imgCorrected = img - illumination; 
thresholdValue = graythresh(imgCorrected); 
bw = imgCorrected > thresholdValue;

実際の画像の例については、mathworksのこのガイドをご覧ください。形態学的画像解析の使用に関する詳細については、Pierre Soille によるこの本をお勧めします。

于 2009-11-28T11:29:08.053 に答える
1

適応しきい値処理がキーワードです。R. Fisher、S. Perkins、A. Walker、および E. Wolfart による2003 年の記事からの引用: 「このより洗練されたバージョンのしきい値処理は、画像内の変化する照明条件 (強い照明勾配の結果として発生する照明条件など) に対応できます。または影。」</p>

ImageMagick の-latオプションを使用すると、次のように実行できます。

convert -lat 50x50-2000 input.jpg output.jpg

入力例 input.jpg

出力例 output.jpg

于 2016-08-29T08:09:28.900 に答える
1

これは非常に遅いかもしれませんが、スキャンした表面を 4 分の 1/16 に分割し、ページ全体で平均グレースケール レベルが類似するように色を変更することをお勧めします。(余白が大きいページだと壊れるかもしれませんが)

于 2009-11-28T06:51:54.700 に答える
1

2 つのアルゴリズムが頭に浮かびます。

  • 低周波照明勾配を緩和するためのハイパス
  • 適切な半径のローカルしきい値
于 2009-12-21T16:57:26.723 に答える
1

良い。通常、私が行う画像処理は非常に時間に敏感であるため、あなたが求めているような複雑なアルゴリズムは機能しません。しかし 。. . 画像を細かく切り刻み、各サブ画像を再スケーリングすることを検討しましたか? これにより、さまざまな照明条件の画像でも「暗い」ピクセルがかなり目立ちます(ここでは、暗いテキストを含む標準的なほとんど白いページについて話していると想定しています.)

それはチートですが、あなたが提案している「正しい」方法よりもはるかに簡単です。

于 2009-11-28T06:49:58.680 に答える
0

エッジ検出フィルターを使用してからフラッドフィル アルゴリズムを使用して、背景と前景を区別することができます。塗りつぶされた領域を補間して、ローカル イルミネーションを決定します。また、フラッドフィル アルゴリズムを変更して、ローカル バックグラウンド値を使用して行間をジャンプしたり、ボックスを塗りつぶしたりすることもできます。

于 2009-11-28T09:11:21.277 に答える
0

また、変化率制御でしきい値ヒステリシスを試すこともできます。通常のしきい値ヒステリシスへのリンクは次のとおりです。最初のしきい値を典型的な白の値に設定します。2 番目のしきい値を隅の最も低い白の値よりも小さく設定します。

違いは、1 番目と 2 番目のしきい値の間のすべての値について、ピクセル間の違いを確認する必要があることです。理想的には、差が正の場合は、通常どおりに行動します。ただし、負の場合は、差が小さい場合にのみしきい値を設定します。

これにより、照明の変化を補正できますが、背景とテキストの間の大きな変化は無視されます。

于 2009-12-21T16:54:58.443 に答える
-1

簡単な開閉操作をしてみませんか?これを試してみてください、結果を見てください:src --cource image

src-open(src)close(src)-src

異なるウィンドウサイズを使用したclose--srcの結果を見ると、画像の背景がわかります。これは役立つと思います。

于 2010-03-02T02:25:34.627 に答える