2

次の画像で数字を認識したい

ここに画像の説明を入力してください

私は現在、Eclipse JavaプロジェクトでTess4Jライブラリを使用していますが、プレーンカラーの背景の文字のみを認識します。この画像では、この画像に文字(数字)があることさえ識別できませんでした。このタスクを実行する方法を見つけるのを手伝ってください。

これが私の現在のコードです:

import net.sourceforge.tess4j.*; 
import java.io.File; 

public class Main { 
  public static void main(String[] args) { 
    File imageFile = new File("image.png"); 
    Tesseract instance = Tesseract.getInstance(); 
    try { 
      String result = instance.doOCR(imageFile); 
      System.out.println(result); 
    } catch (TesseractException e) {
      System.err.println(e.getMessage()); 
    } 
  } 
}

黄色い線で区切られた正方形を数える方法がある場合。

Thank you

4

1 に答える 1

8

画像が代表的なものである場合、最初のステップとして必要なのは、最大値に近いしきい値での2値化と、それに続く小さなコンポーネントの破棄だけです。

f = Import["http://i.stack.imgur.com/6AXwH.jpg"]
step1 = SelectComponents[Binarize[ColorConvert[f, "Grayscale"], 0.9], 
  "Count", #1 > 100 &]

ここに画像の説明を入力してください

これで、数字が高すぎたり薄すぎたりしないことがわかっている場合(これは画像のサイズによって異なります)、境界ボックスに基づいて残りのコンポーネントをフィルタリングできます。

SelectComponents[step1, "BoundingBox", 
 And[10 < #[[2, 1]] - #[[1, 1]] < 100, 50 < #[[2, 2]] - #[[1, 2]] < 100] &]

ここに画像の説明を入力してください

各領域を分離するために、黄色専用のチャネルがある色空間の使用を検討できます。CMYKここでも可能性があります。また、必要なのは、線を完成させるための基本的な形態学的クロージングとともに、高い値のしきい値だけです(この例では、線は画像の境界まで伸びていないため)。ここで形態学的クロージングを使用する代わりに、たとえば、HoughまたはRANSACを使用して線を検出できます。

rects = Closing[
  Closing[Binarize[ColorSeparate[f, "CMYK"][[3]], 0.9], 
   ConstantArray[1, {1, 15}]], ConstantArray[1, {15, 1}]] (* left image *)
Colorize[MorphologicalComponents[ColorNegate[rects]], 
 ColorFunction -> "Rainbow"]                              (* right image *)

ここに画像の説明を入力してください ここに画像の説明を入力してください

ここで使用されるツールは非常にシンプルで、ほとんどすべての画像処理ライブラリがそれらを提供します。採用できるより堅牢なアプローチもありますが、特定のイメージでは必要ありません。

于 2013-02-12T16:53:45.810 に答える