Извлечение номерного знака из изображения транспортного средства


Я разрабатываю приложение anpr, и мне удалось найти область номерного знака на изображении автомобиля. Ниже приводится изображение номерного знака i H ave извлеченного

Когда я передаю это изображение в Tesseract OCR engine, оно, кажется, обнаруживает символ " L "перед" C", поэтому я думаю о том, чтобы убрать оставшиеся черные пиксели вокруг области номерного знака. есть ли какой-то особый подход, который я могу использовать, чтобы разобраться в этом? Я использую aforge.net библиотека в этом случае

Ура

1 2

1 ответ:

Один из подходов к полуавтоматическому удалению черных пиксельных областей вокруг номерного знака может заключаться в применении фильтра PointedColorFloodFill четыре раза, размещая начальные точки заливки в четырех углах изображения.

Вот пример кода, в котором я применил фильтр к копии изображения номерного знака из вашего вопроса выше (обрезанного, чтобы удалить белую рамку):

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 добавить следующие четыре строки:

var grayFilter = new Grayscale(0.3, 0.3, 0.3);
var image = grayFilter.Apply(originalImage);

var bradleyfilter = new BradleyLocalThresholding();
bradleyfilter.ApplyInPlace(image);

И уменьшить допуск PointedColorFloodFill до, например, 10 для каждого компонента RGB:

filter.Tolerance = Color.FromArgb(10, 10, 10);
Полностью отфильтрованный номерной знак теперь будет выглядеть так:

Введите описание изображения здесь