私はOpenCVを使用してANPRシステムに取り組んでおり、いくつかの記事で文字セグメンテーションを行う方法を見てきました。アイデアは、画像全体の色の濃度を示すグラフを作成することです。
どうすればよいですか?
これは私が持っている画像です:
それぞれの文字を識別するために、上記のように黒い領域の位置を検出する必要があります。
ピクセルごとに値を追加しようとしましたが、Androidでこれを行っているため、これにかかる時間は許容できません。
私はOpenCVを使用してANPRシステムに取り組んでおり、いくつかの記事で文字セグメンテーションを行う方法を見てきました。アイデアは、画像全体の色の濃度を示すグラフを作成することです。
どうすればよいですか?
これは私が持っている画像です:
それぞれの文字を識別するために、上記のように黒い領域の位置を検出する必要があります。
ピクセルごとに値を追加しようとしましたが、Androidでこれを行っているため、これにかかる時間は許容できません。
わかりました。1か月後ですが、このためのコードを(Pythonで)少し書きました;)
(画像濃度ヒストグラムの直後にいると仮定します)
import cv
im2 = cv.LoadImage('ph05l.jpg')
width, height = cv.GetSize(im2)
hist = []
column_width = 1 # this allows you to speed up the result,
# at the expense of horizontal resolution. (higher is faster)
for x in xrange(width / column_width):
column = cv.GetSubRect(im2, (x * column_width, 0, column_width, height))
hist.append(sum(cv.Sum(column)) / 3)
速度を上げるには、画像ファイルを変更する必要はありません。サンプリングのビン幅を変更するだけです(column_width
スクリプト内)。これを行うと、明らかに解像度が低下します(下の画像を参照)。
hist
画像では、1、10、100の'sを使用して、ファイルで結果(グラフ)を示していますcolumn_width
。それぞれ0.11、0.02、0.01秒で実行されました。
私もPILで書いたのですが、実行速度が5倍から10倍遅くなります。
OpenALPR(http://www.openalpr.com)をチェックしてください。同じ方法で文字のセグメンテーションを行います(ヒストグラムを使用)。デスクトップではかなり高速ですが、Androidでどれだけ高速になるかはわかりません。