2017-07-28 30 views
1

ナンバープレートを自動的に読み取ろうとしています。 私はOpenCV Haar Cascadeクラシファイアを訓練して、ソースイメージ内のナンバープレートを妥当な成功に分離しました。次に例を示します(黒い境界の長方形に注意してください)。 SVMを経て分類のための個々の文字を分離OpenCV:OCRのナンバープレート文字の分離

  • Haar cascade classifier これに続いて、私はどちらかのためにナンバープレートをクリーンアップしようとします。
  • 有効な文字のホワイトリストで清掃されたライセンスプレートをTesseract OCRに提供します。

プレートをクリーンアップするために、私は次の変換を実行します。ここに

# Assuming 'plate' is a sub-image featuring the isolated license plate 
height, width = plate.shape 
# Enlarge the license plate 
cleaned = cv2.resize(plate, (width*3,height*3)) 
# Perform an adaptive threshold 
cleaned = cv2.adaptiveThreshold(cleaned ,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,7) 
# Remove any residual noise with an elliptical transform 
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3)) 
cleaned = cv2.morphologyEx(cleaned, cv2.MORPH_CLOSE, kernel) 

私の目標は、任意のノイズを除去しながら、黒と白の背景に文字を分離することです。

この方法を使用して、私は、一般的に3つの結果の1を取得見つける:

画像うるさいです。

Noisy

あまりにも多くの削除(文字が切り離さ)。

Blotchy

合理(すべての文字を単離し、一致)。

Okay

I've included the original images and cropped plates in this album.

私が原因のナンバープレートの一貫性のない性質のために、私はおそらく、よりダイナミックなクリーンアップの方法が必要になりますが、私は始めるのはどこか分からないことを実現します。私は、閾値と形態学の関数のパラメータで試してみましたが、これは一般に、1つの画像に向かって過剰チューニングにつながります。

クリーンアップ機能を改善するにはどうすればよいですか?

+1

「あまりにも騒々しい」とは、多くの余分な文字やグラフィック "、これはアメリカのプレートの共通の機能です。 –

答えて

1

あなたがしようとしていることはかなり挑戦的であり、あなたが見せてくれるサンプルはまだ簡単なものです。

最初に、主要文字領域の良好な区切りを得ることが重要です。

垂直区切りの場合、セパレータとして機能する水平の白い線を見つけてみてください。 「あまりにも騒々しい」などのより難しいケースでは、白と黒のランカウント、平均長さ、長さの偏差などの水平線に沿った統計を計算し、真の文字間の線の間の弁別パラメータを見つけることができます。余分な機能(ただし、暗黙のうちに白い線が検出されます)。

このようにすると、誤って断片化される可能性のある同じタイプの行によって形成された長方形が得られます。真の文字に属すると思われる四角形をマージしてみてください。処理の次のステップはこの矩形に限定されます。

垂直方向の区切りでは、文字が分割されて縦線が横切るようなケースや、別個の文字が汚れやその他の乱雑につながっている場合があります。 (ひどい場合には、文字が拡大された領域に触れることがあります)。

上記と同様の手法で、候補縦線を見つけます。今では、いくつかの仮説を形成すること以外にほとんど選択肢がなく、キャラクタが最小間隔(軸間)を持つという制約によって、これらのセパレータの可能な組み合わせを列挙します。

これらの仮説を作成したら、文字認識を実行して全体のスコアを計算することによって、最良の組み合わせを決定できます。 (この段階では、文字の可能な形状を知らずにセグメンテーションを実行することはできないと考えています。これは認識が有効になる理由です)

関連する問題