私はanprアプリケーションを開発していて、車両画像からナンバープレート領域を見つけることができました。
この画像をtesseractOCRエンジンにフィードすると、「C」の前に「L」の文字が検出されたようです。そのため、ナンバープレート周辺の残りの黒いピクセルを取り除くことを考えています。これを整理するために私が取ることができる特定のアプローチはありますか?この場合、私はaforge.netライブラリを使用しています
乾杯
私はanprアプリケーションを開発していて、車両画像からナンバープレート領域を見つけることができました。
この画像をtesseractOCRエンジンにフィードすると、「C」の前に「L」の文字が検出されたようです。そのため、ナンバープレート周辺の残りの黒いピクセルを取り除くことを考えています。これを整理するために私が取ることができる特定のアプローチはありますか?この場合、私はaforge.netライブラリを使用しています
乾杯
ナンバープレートの周りの黒いピクセル領域を半自動的に削除する1つの方法は、PointedColorFloodFillフィルターを4回適用して、画像の四隅に塗りつぶしの開始点を配置することです。
上記の質問のナンバープレート画像のコピーにフィルターを適用したコード例を次に示します(白い境界線を削除するためにトリミング)。
var filter = new PointedColorFloodFill();
filter.FillColor = Color.White;
filter.Tolerance = Color.FromArgb(60, 60, 60);
filter.StartingPoint = new IntPoint(0, 0);
filter.ApplyInPlace(image);
filter.StartingPoint = new IntPoint(image.Size.Width - 1, 0);
filter.ApplyInPlace(image);
filter.StartingPoint = new IntPoint(image.Size.Width - 1, image.Size.Height - 1);
filter.ApplyInPlace(image);
filter.StartingPoint = new IntPoint(0, image.Size.Height - 1);
filter.ApplyInPlace(image);
これは、四隅すべてからのフィルタリングが完了した後、次の画像を提供します。
より灰色がかった塗りつぶしの色と異なる許容値を試してみることもできますが、この例は少なくとも妥当な出発点を提供する可能性があります。
更新私はBradleyLocalThresholdingフィルターに出くわしました。これにより、OCR認識の開始点がさらに改善される可能性があります。このフィルターは8bpp画像にのみ適用できます。これは、たとえば、最初に元の画像にグレースケールフィルターを適用することで解決できます。PointedColorFloodFill
コードの前に次の4行を追加した場合:
var grayFilter = new Grayscale(0.3, 0.3, 0.3);
var image = grayFilter.Apply(originalImage);
var bradleyfilter = new BradleyLocalThresholding();
bradleyfilter.ApplyInPlace(image);
PointedColorFloodFill
そして、 RGBコンポーネントごとに許容誤差をたとえば10に減らします。
filter.Tolerance = Color.FromArgb(10, 10, 10);
完全にフィルタリングされたナンバープレートは次のようになります。