解釈

2016-08-25 21 views
1

私は下、上、中央、右中央の中央でのような画像のさまざまな部分にいくつかのテキストを持っているバイナリなど解釈

オリジナル画像

を持っています

enter image description here

ここでは、手作業で描いた領域を赤で示します。

plot(sum(edgedImage1,1)) 

enter image description here

plot(sum(edgedImage1,2)) 

enter image description here

は、誰かが私に説明を与えることができます:私は、画像の水平方向と垂直方向の総和を計算し、それらをプロット

enter image description here

これらのプロットは私に先に説明した構造に関して元画像についてを教えていますか? さらに、これらのプロットは、私が手動で赤で描いた領域をどのように抽出するのに役立ちますか?

答えて

2

合計操作について洗練された方法はありません。簡単に言えば、sum(edgedImage1,1)はイメージ内の各列のすべての行の合計を計算します。これがプロットしたものです。実際には、各列のすべての行について、すべての非ゼロ値(つまり、白のピクセル)の合計を計算しています。プロットの横軸は、観測している行の合計を示しています。同様に、sum(edgedImage,2)はイメージの各行のすべての列の合計を計算します。これがプロットしたものです。

テキストは横向きに表示されるため、sum(edgeImage,1)は特に役に立ちません。非常に便利なのは、sum(edgedImage,2)の操作です。イメージ内の空白の行の場合は、画像の各行の水平列の合計が非常に小さい値になりますが、イメージ内のテキストまたはストロークを含む行の場合は、合計が非常に大きくなります。私が話していることの良い例は、あなたのイメージの底に見えます。あなたが行600と700の間を調べると、それらの行の間に囲まれたテキストがたくさんあるので、あなたのプロットには巨大なスパイクがあります。

この結果を使用すると、イメージ内のテキストまたはストロークを含む領域が、ある閾値を超えるすべての行を見つけることになることがわかります。実行された合計操作からモードまたはピークを見つけることと組み合わせることで、テキストの各領域を非常に簡単にローカライズしたり切り離したりすることができます。

sum(edgedImage,2)によって提供される曲線を滑らかにしたい場合は、テキストの塊の数を決定することができます。この信号を滑らかにすると、5行のテキストに対応する5つのモードがあることがはっきりとわかります。

+0

あなたの説明は素晴らしく、本当に役立ちます。私がこれを複製できる場所からいくつかのコードリンクを参照することができれば、あなたの親切で上手いでしょう。 –

+1

@ NaseerAhmed元の画像(描画した赤い四角形なし)を指定すると、私は書くことができるいくつかのサンプル結果を表示できます。 – rayryeng

+0

私はオリジナルのImage.ActuallyオリジナルをアップロードしましたImageは入力画像に適用したsobelフィルターです。 –

1

各行の合計を示す2番目のプロットです。これは、多くの情報を持っていて、どれもない行を示します。

このプロットを使用して、矩形の始まりの値が急に傾き、矩形の終わりの値が急激に減少するのを探すことで、矩形を見つけることができます。あなたがそれを行う前に、私はローパスフィルタをかけてデータを調べ、次にこれの微分を見て、大きな微分を探します。

最初のプロットは同じことができますが、より敏感です。

+0

matlabの努力? –

1

あなたの最後のプロットの最小値は、テキストの行の間のギャップです...

あなただけのグラフを取ると、あたりのピクセルの量が少なすぎるとy画像の軸と、閾値領域にそのy軸を合わせますカラム。必要に応じて

align

は今、あなたは画像をデスキューする必要があります。これらの領域(赤)は、テキストの行または任意のあなたがイメージに乗っ間のギャップです。スキューが大きすぎる場合は、y軸の合計の前にスキュー除去を適用する必要があります。この後

あなたは別に、各非赤色領域のためのx軸の合計プロットを作成し、同じようにOCRのための各文字の面積を取得するには、文字/単語間のギャップを検出します。あなたは非ギャップ/の統計分析を行う場合は、文字領域に撮影した場合、これらのプロットはまた、OCRに使用することができます

xに合わせ、この時間ではなく

を見ますギャップサイズの場合、最も頻繁に繰り返されるのは、通常、通常のテキストのフォント間隔/サイズです。

+0

私は取得していませんどのように私はmatlabでそれをやりますか? –

+0

@ NaseerAhmed私はMatlabをまったくコード化しません(私はその環境を嫌います)。しかし、あなたは1Dベクトルとして合計プロットを保存し、そのように扱うことができます。あなたが1Dにあるtresholdingのような基本的なものをどのようにコードするのかわからないのであれば、単一の 'if'文を使って' for'サイクルを実行してください。自分でコーディングすることなく、matlabの組み込み関数のgazilionを実行し、代わりにこのために悪用可能なものを探して、望ましい結果が得られるまでパズルのように組み立てる必要があります。 – Spektre