2017-12-01 17 views
0

私はTVフッテージの字幕に対してOCRを適用しています。 (私はTesseact 3.x w/C++を使用しています)OCRの前処理としてテキストと背景部分を分割しようとしています。OCRの前処理のために画像からノイズとテキストを分割する方法

ここで元の画像です:

enter image description here

そして、前処理画像:

enter image description here

OCR結果は:Sicemnクローン

上記前処理された画像が示されているように、手紙の周りに残っているいくつかの「霧」があります。これは、OCRモジュールがj ob。

これらの「かぶり」をプログラマチックに削除する方法や、前処理された画像から画像を削除する画像処理を行う方法はありますか? (この写真に最適化するには、他の写真に影響を与えることができるので)

前処理されたロジックが大きく異なる画像を処理するために最適化されているので、私はむしろ、「クリーン」への道に前処理画像を見つけたい、前処理されたロジックを変更するよりも

どんな提案も大歓迎です。


更新

どうやら、sixelaの答えは素晴らしいです、そして例ほとんどで動作します。結果の

enter image description here

例:一見

enter image description here

、ガウスそれが機能しない 場合は、背景も動作していない場合の

例テキストの類似色を含んでこのタイプのフッテージではフィルタが問題を引き起こすようです。 これは、異なる映像が異なるアプローチを必要とする可能性があることを意味します。

+0

背景が変化しながら、キャプションは、おそらくいくつかの連続するフレームに対して同一のままです。 n個のフレームにわたって変化するピクセルとほぼ同じままのピクセル間を分割しようとする場合があります。それは完璧ではありませんが、多くの場合に役立ちます。 –

+0

こんにちはエイドリアン、あなたの助言をありがとう。はい、私はすでにOpenCVのabsdiffとMOGフィルタを使ってその方法を試しました。通常のフッテージではフレームのオブジェクトがあまりにも速く動くことはないので、うまく動作しませんでした。字幕が人に重なっていると、すばやく動かないが、字幕は1〜2秒間しか表示されないとしましょう。車の追いかけシーンであれば、うまくいくでしょう。 – Aki24x

答えて

1

私は、形態学的操作としきい値処理を使用して、より鮮明な(完全ではない)画像を得ることができました。グレースケール画像

  • トップハット形態学的操作(3x3のカーネル)をノイズ除去するためにガウスぼかし(9×9カーネル)を適用

    1. 私は
    2. グレースケールで元の画像を変換することにより開始しました:ここ

      はどのようにあります白のテキストに

    3. 大津しきい値処理方法を取得する
    4. 拡張取得するには、バイナリのしきい値を反転
    5. 私は最終的に、OCR結果として、このテキストを与え、次の画像

      enter image description here

      得られた黒色

    で白のテキスト: "VOUのdon'kので"

    PS:もちろん、この結果はパラメータ(カーネルサイズなど)を調整することで改善できますが、それがあなたを導くことができれば幸いです。 PythonでOpenCvを使用して、これらのメソッドをすぐに試してみました。この後

    import cv2 
    
    image = cv2.imread('./inputImg.png', 0) 
    imgBlur = cv2.GaussianBlur(image, (9, 9), 0) 
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) 
    imgTH = cv2.morphologyEx(imgBlur, cv2.MORPH_TOPHAT, kernel) 
    _, imgBin = cv2.threshold(imgTH, 0, 250, cv2.THRESH_OTSU) 
    
    imgdil = cv2.dilate(imgBin, kernel) 
    _, imgBin_Inv = cv2.threshold(imgdil, 0, 250, cv2.THRESH_BINARY_INV) 
    
    cv2.imshow('original', image) 
    cv2.imshow('bin', imgBin) 
    cv2.imshow('dil', imgdil) 
    cv2.imshow('inv', imgBin_Inv) 
    
    cv2.imwrite('./output.png', imgBin_Inv) 
    cv2.waitKey(0) 
    

    私はこのコマンドを使用してたTesseract上に出力画像を試みた:

    tesseract output.png stdout 
    
  • +0

    すごい!ソースコードを投稿することは可能ですか?私も同様にPythonを使用するので、本当に役に立ちます! – Aki24x

    +0

    こんにちは、私は最初の投稿をソースコードで編集しました。 私は時間がある場合は、より良い出力イメージを得るためにコードを改善しようとします。 – sixela

    +0

    こんにちはsixela、あなたの素晴らしい投稿のために非常にありがとう。より多くのテストの中で、私はGaussian w/Morphologyメソッドでは動作しない映像を発見しました。 (私は新しい映像を含むようにこの記事を更新しました)別のアプローチを見つけるために映像を見てみるつもりですが、もしあなたにアイデアがあるなら、教えてください。 – Aki24x

    関連する問題