大学での最終プロジェクトでは、車両のナンバープレート検出アプリケーションを開発しています。私は自分自身を中級プログラマーと考えていますが、数学の知識には中等学校以上のものが不足しているため、適切な数式を作成するのがおそらく必要以上に難しくなります。
私は次のような学術論文を探すのにかなりの時間を費やしました。
数学に関して言えば、私は迷っています。このテストにより、さまざまなグラフィック画像が生産的であることが証明されました。たとえば:
に
ただし、このアプローチはその特定の画像に対してのみ有効であり、この手法を別の画像に適用すると、より悪い変換が発生するはずです。 「ボトムハット形態変換」と呼ばれる式について読んだことがありますが、これは次のことを行います。
基本的に、変換は画像のすべての暗いディテールを保持し、他のすべて(より大きな暗い領域と明るい領域を含む)を排除します。
これに関する多くの情報を見つけることはできませんが、レポートの終わり近くにあるドキュメント内の画像はその有効性を示しています。
開発に焦点を当てる変換技術と、私に役立つアルゴリズムについてアドバイスが必要です。
編集: 続き-車両ナンバープレートの検出 に関する新しい情報
あなたが取ることができるいくつかのアプローチがありますが、頭に浮かぶ最初の戦略は次のとおりです:
私が言ったように、これは多くの戦略のうちの1つですが、必要なのは重い数学の最小量を必要とするものです...それはあなたのために働くOCR実装を見つけることができる場合です。
数年前にJavaで同様のプロジェクトを行いました。最初に Sobel演算子 を適用し、次にすべての画像をプレートの画像でマスクしました(Sobel演算子も適用しました)。最大の一致領域は、プレートがある場所です。次に、選択した地域にOCRを適用して、番号を取得します。
このタスクを実行することをお勧めします。詳細な回答をお読みください こちら 。
ソーベルフィルターを適用して、垂直エッジを見つけます。
Sobel(gray, dst, -1, 1, 0)
minAreaRect
を見つけます。アスペクト比と最小および最大面積に基づいて長方形を選択します。adaptiveThreshold
の後の画像からこれらの検出された長方形部分を切り取り、OCRを適用します。英国にはすでにそれを行うシステムがあります。 10分以内にロンドンで車を見つけることができることを示したテレビ番組を見たことを思い出します(番号と車が運転していることを知っていると仮定します)。 http://en.wikipedia.org/wiki/Automatic_number_plate_recognition
自動ナンバープレート認識ライブラリ & このクエリ も参照できます。これにより、物事にアプローチする方法、および既存のソリューションがどのように存在するかについてのアイデアも得られます。
しかし、paulが答えたように、最初に完全な画像から長方形のナンバープレートを見つけ、それを二値化してから、利用可能なOCRライブラリを使用する必要があります(Tesseractをお勧めします)
これを参照できます link これは、長方形のプレートを見つけるのに役立ちます。 openCVライブラリを使用する必要があるので、多くの数学は必要ありませんが、はい、舞台裏で何が起こっているかについての基本的な理解は、より良い方法で問題を解決するのに役立ちます。
それは、ボトムハット変換の計算方法を正確に教えてくれます(私にとっては、逆の段階的なしきい値変換のようなものです)。
最初に行うことは、膨張と収縮の2つのモルフォロジー関数を実装することです。
これを行うには、fとbが必要です。次に、見つかった最大値を保持するポイントで、画像の小さな領域で関数を計算します。
(f ⊕ b)(s, t) = max{f (s − x, t − y) + b(x, y)
|(s − x), (t − y) ∈ Df ; (x, y)∈Db}
つまり、ドメイン領域内のすべてのポイント(ポイント(s、t)を中心とする小さな長方形など)で式の最大値を取得します。
単純な擬似コードは
max = -infinity // for the point (s,t) on the image, must compute this for all points
for(x = -5 to 5)
for(y = -5 to 5)
max = Max(max, f(s - x, t - y) + b(x,y))
事実上、最大値の新しいイメージができました。
実際には非常に単純なので、それ以上難しくしないでください(領域の各ポイントにb(x、y)を追加し、どれが最大値を与えるかを見つけます)。
あなたは侵食に対して同じことを行います(上記と非常に似ています)
今、開閉は2つの構成です
最初に膨張を実行し、次に開口部の侵食を実行すると考えることができます。
最終的に元の画像からクロージングを差し引くと言うので、変換が必要です。
ナンバープレートの存在を検出するという問題に興味がある場合(認識とは対照的に)、画像のテキストの検出を見てください。
この質問はあなたのものに関連しています: 画像上のテキストの存在を検出するアルゴリズム
これにはサービスまたはサードパーティを使用することをお勧めします。 Open ALPRは、このサービスに非常に正確なオープンソースパッケージを提供します。
ALPRを開く- https://www.openalpr.com/
Video Open ALPRのデモ
https://www.youtube.com/watch?v=E-U_H9EbW6
または、APIを使用できます-
Macgyver Computer Vision API
https://askmacgyver.com/explore/program/license-plate-recognition/3X5D3d2k
このAPIでは、単に次のリクエストを送信します-
ペイロードの例
{
id: "3X5D3d2k",
key: "free",
data: {
"image_url": "https://storage.googleapis.com/marketing-files/program-markdown-assets/license-detection/license-plate.jpg",
"country": "us",
"numberCandidates": 2
}
}
上記の画像は以下を返します-
"plate": "284FH8"
"confidence": 90.601013