継続 - 車両ナンバープレートの検出
-
12-10-2019 - |
質問
このスレッドから続く:
ナンバープレートを可能な限り強調するために、画像操作技術を開発しました。全体的に満足しています。ここに2つのサンプルがあります。
これで、実際にナンバープレートを検出する最も難しい部分があります。いくつかのエッジ検出方法があることは知っていますが、私の数学は非常に貧弱なので、複雑な式の一部をコードに翻訳することはできません。
これまでの私のアイデアは、これから各ピクセルを色のリストと比較する画像内のすべてのピクセル(IMG幅と高さに基づくループの場合)をループすることです。プレートホワイト、テキストの黒。これがたまたまこれらのピクセルがメモリ内の新しいビットマップに組み込まれている場合、このパターンが検出されなくなったらOCRスキャンが実行されます。
それは、遅すぎる、または集中的な欠陥のあるアイデアかもしれないので、これについてのいくつかの入力に感謝します。
ありがとう
解決
「ナンバープレートの白とテキストの黒を区別し続けるかどうかを確認する方法」の方法は、基本的に、ピクセルの強度が黒から白に変化し、その逆に何度も変化する領域を探しています。エッジ検出は、本質的に同じことを達成できます。ただし、その過程で多くのことを学ぶので、独自の方法を実装することは依然として良い考えです。ちなみに、両方を行い、メソッドの出力を既製のエッジ検出アルゴリズムの出力と比較してみませんか?
ある時点では、たとえば「ノットキャラクター」ラベルに対応する黒いピクセル、「is-a-character」ラベルに対応する白いピクセルなどのバイナリ画像が必要です。おそらく、それを行う最も簡単な方法は、しきい値関数を使用することです。しかし、それはキャラクターがすでに何らかの形で強調されている場合にのみうまく機能します。
誰かがあなたの他のスレッドで言及したように、あなたはそれを黒い帽子演算子を使用してそれを行うことができます、それは次のようなものになります:
上記の画像をたとえば、OTSUの方法(グローバルなしきい値レベルを自動的に決定する)で上記の画像をしきいがらせると、これを取得します。
その画像をきれいにする方法はいくつかあります。たとえば、接続されたコンポーネントを見つけて、小さすぎる、大きすぎる、広すぎる、または高すぎてキャラクターになるには捨てることができます。
画像のキャラクターは比較的大きく、完全に接続されているため、この方法はうまく機能します。
次に、希望するコンポーネント(=文字の数)が得られるまで、近隣のプロパティに基づいて残りのコンポーネントをフィルタリングできます。キャラクターを認識したい場合は、各キャラクターの機能を計算して、通常は監視された学習で構築される分類子に入力できます。
もちろん、上記のすべての手順はそれを行う1つの方法にすぎません。
ちなみに、OpenCV + Pythonを使用して上記の画像を生成しました。これは、コンピュータービジョンに最適な組み合わせです。
他のヒント
色は、見栄えが良いのと同じように、シェーディングと光の状態でかなりの課題を提示します。実際には、どれだけ堅牢にしたいのかによりますが、現実世界のケースはそのような問題に対処する必要があります。
私は道路映像の調査をしました(私のプロフィールページを参照して、こちらをご覧ください サンプル)そして、現実世界の道路映像は光の条件の点で非常にうるさいことがあり、あなたの色は黄色のバックナンバープレートのために茶色から白に変化する可能性があることがわかりました。
ほとんどのアルゴリズムは行の検出を使用し、許容範囲内でアスペクト比のボックスを見つけようとします。
このテーマに関する文献レビューを行うことをお勧めしますが、これは1993年に達成されました(正しく覚えていれば)ので、何千もの記事があります。
これは非常に科学的な領域であるため、アルゴリズムだけが解決しないため、多数の前/後処理手順が必要になります。
簡単に言えば、私の提案は、Hough Transformを使用して線を見つけてから、許容可能なアスペクト比を作成できる長方形を探すことです。
Harris機能の検出は重要なエッジを提供する可能性がありますが、車が軽い色である場合、これは機能しません。
多くのサンプルがある場合は、ポールヴィオラとマイケルジョーンズによって開発された顔検出方法を確認することができます。顔の検出に適しています。ナンバープレートの検出では問題ありません(特に他の方法と組み合わせた場合)