5

数独ボードから数字を抽出しようとしています。ボードとその角を検出して変換すると、ボードだけがきれいに並んだ画像が残ります。今、Tesseract android 実装の Tess-Two を使用して数字を認識しようとしています。画像を9つの部分に分割しました

currentCell = undistortedThreshed.submat(rect);

rect、画像を囲む四角形です。

次に数字の認識です。

4 などの一部の数字は、完全に認識します。一部、主に 6、7、8 は 0 または何も認識されません。

画像をきれいにすることで、テッセラクトをできる限り助けたいと思っていcurrentCellます。現時点では、このように見えます 倒立 6。(逆しきい値なしでも試しました)。白線(数独線)をなくしたい。私はこのようなことを試しました(hereから取得)

Imgproc.Canny(currentCell, currentCell, 80, 90);
Mat lines = new Mat();
int threshold = 50;
int minLineSize = 5;
int lineGap = 20;

Imgproc.HoughLinesP(currentCell, lines, 1, Math.PI / 180,
        threshold, minLineSize, lineGap);
for (int x = 0; x < lines.cols() && x < 1; x++) {
    double[] vec = lines.get(0, x);
    double x1 = vec[0], y1 = vec[1], x2 = vec[2], y2 = vec[3];
    Point start = new Point(x1, y1);
    Point end = new Point(x2, y2);

    Core.line(currentCell, start, end, new Scalar(255), 10);

}

何も描画されません。線の幅と色をいじってみましたが、まだ何も描画されません。大きな画像に線を引いてみましたが、脱落した画像には何も機能しません..

助言がありますか?

編集

何らかの理由で、行が見つからないようです。これは、canny を適用した後のイメージですキャニーの後6が、HoughLines線は検出されません。HoughLinesOpenCVのドキュメントに示されているように、異なる値で両方を試しHoughLinesPましたが、何も機能しません...これらはかなり明白な行です..何が間違っていますか? ありがとう!

4

2 に答える 2

3

私は結局違うことをしました。

以前findContoursは最大の等高線、つまり数字を取得していました。

を使用して境界ボックスを取得しましたboundingRect

これを使用して抽出しsubmat、ほら。数字だけ出ました。

残念ながら、それはまったく違いはないようです。Tesseract はまだ数字を正しく認識できません。結果が得られない場合もあれば、数字を拡張した後に 6 が 0 として認識される場合もあります。しかし、それは別の質問の問題です。

于 2012-11-26T05:18:34.780 に答える
1

これは私の頭のすぐ上にあるアイデアです。

イメージ内のハフ線を計算するコードを保持します。つまり、グリッドに対応する線を取得できます。

次に、元の画像にこれらの線を描くだけですが、色を BLACK に設定します。

白い線のほとんどは、新しく描かれた黒い線で覆われます。ハフ ラインの位置が実際のラインと正確に一致していないため、小さな白い点がいくつか残る場合があります。接続されたコンポーネントを介してそれらを排除する (および小さすぎるコンポーネントを破棄する) またはいくつかの形態学的操作 (実際の数字が変更されないように注意すること) によって、これらの不完全性を処理できます。

それを試して、私に知らせてください。これがお役に立てば幸いです。

于 2012-11-25T02:20:27.893 に答える