1

私はこのような画像からビット コードを認識するプロジェクトに取り組んでいます。黒い四角形は 0 ビットを表し、白 (空白、表示されない) は 1 ビットを表します。

誰かがこの情報を抽出するために画像を処理するアイデアを持っていますか? 私のプロジェクトはjavaで書かれていますが、どんな解決策も受け入れられます。事前に感謝します。


サポートしてくれてありがとう。私は画像処理の専門家ではありません。Canny Edge Detector 実装を使用してエッジ検出を適用しようとしています。無料の Java 実装はこちらにあります。この完全な画像 [http://img257.imageshack.us/img257/5323/colorimg.png] を使用し、処理を高速化するために縮小 (倍率 = 0.4) した結果が [http://img222.imageshack] です。 .us/img222/8255/colorimgout.png]. さて、ビット値が0の白い四角形をデコードし、1の四角形をデコードするにはどうすればよいですか? 画像は 10 行 X 16 列です。私はPythonを使用していませんが、Javaに変換しようとすることができます. サポートに感謝します。

4

3 に答える 3

1

これは、古き良きOMR(光学式マーク認識)の認識です。

解決策は、取得するデータの品質と一貫性によって異なるため、ノイズは重要です。

画像処理ライブラリを使用すると明らかに役立ちます。

単純なケース: 画像に歪みがなく、伸びも縮みもありません

画像の水平および垂直プロファイルを作成します。つまり、すべての列とすべての行の値を合計し、配列に格納します。MxN (幅 x 高さ) の画像の場合、水平プロファイルに M セル、垂直プロファイルに N セルがあります。

しきい値を使用して、白 (空) のセルと黒のセルを見つけます。これは、各行または列に少なくとも 2 つのエントリを取得することを前提としています。したがって、黒いセルは関心のある場所 (マークが期待される場所) を定義します。

これに基づいて、フォーム内のひし形で定義し、ひし形 (マークがある四角形) の座標を取得し、各ひし形のピクセル値を合計し、その数に基づいて、マークまたはマークがあるかどうかを定義できます。いいえ。

ケース 2: スキュー (画像の傾き)

フーリエ (FFT) を使用して傾斜値を見つけ、それを変換します。

ケース 3: 伸びたり縮んだりする

1 とほとんど同じですが、ノイズが高く、信頼性が低くなります。

于 2010-12-18T12:54:54.137 に答える
0

私は Java に詳しくありませんが、Python では、イメージング ライブラリを使用して画像を開くことができます。次に、高さと幅を読み込み、それに応じて画像を高さ/行と幅/列でグリッドに分割します。次に、それらの領域で黒のピクセルを探すか、または PIL がその黒を登録する色を探します。これは明らかに、グリッドのようなデータの性質に依存しています。

編集:

エッジ検出を行うことも実り多いかもしれません。まず、ウィキペディアのようなエッジ検出方法を適用します。archive.alwaysmovefast.com/basic-edge-detection-in-python.html にあるものを使用しました。次に、180 未満のグレースケール値をすべて黒に変換し (ボックスを暗くしたい場合は、この値を増やすだけです)、それ以外の場合は完全に白にします。次に、境界ボックス、つまりピクセルがすべて白の線を作成します。データがひどく歪んでいない場合、これはかなりうまくいくはずですが、そうでない場合は、さらに作業を行う必要があるかもしれません。結果はこちら:http: //imm.io/2BLd

編集2:

デニスさん、データセットの大きさと画像の大きさは? これらの画像が何千もある場合、境界線 (赤い背景と黄色のバー) を手動で削除することは現実的ではありません。これは、先に進む前に知っておくことが重要だと思います。また、ノイズが少ないように見えるため、この場合、プリウィットエッジ検出がより役立つと思われます。

代替テキスト

次の方法でビンに前処理を行う場合、以前のセグメンテーション方法を適用できます。この場合、いくつかのトレーニング サンプルの後に、黒または白のピクセル数としきい値をカウントするだけで済みます。 代替テキスト

于 2010-12-18T12:53:09.997 に答える
0

Aliostad はいくつかの良いコメントをしています。

これは OMR であり、優れた画像処理ライブラリを使用すると、一貫性のある優れた結果を簡単に得ることができます。www.leptonica.com は無料のオープン ソース 'C' ライブラリであり、開始するのに非常に適しています。スキューとしきい値処理のタスクを処理できます。B/W へのしきい値設定は、良い出発点です。

もう 1 つのオプションは、.NET 用のIEvolution - http://www.hi-components.com/nievolution.aspです。

成功するには、特にドキュメントのスキャンやカメラ画像からのキャプチャを使用している場合に、ゆがみや伸びを許容するために、ある種の参照/レジストレーション マークが必要です。

于 2010-12-19T12:50:47.477 に答える