Zhivko Kabaivanov Ответов: 2

Улучшите предварительную обработку изображений


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

После распознавания текста не. Мне нужно было сделать предварительную обработку, чтобы получить лучшую точность.

Я предоставляю пример кода, используемого здесь, а также входное и результирующее изображение.

входное изображение
полученное изображение

Если вы посмотрите внимательно, то пунктирная область-это проблема.

Не могли бы вы посоветовать мне, как оптимизировать обработку изображений? Какие процедуры необходимы, чтобы улучшить конечный результат распознавания?

Что я уже пробовал:

Вот мое решение

Mat image = imread("address2.jpg");

Mat gray_image;
cvtColor(image, gray_image, CV_BGR2GRAY);

Mat bluredImage;
GaussianBlur(gray_image, bluredImage, Size(1, 1), 0);

Mat threshImage;
threshold(bluredImage, threshImage, 0, 255, THRESH_OTSU);

imwrite("result.jpg", asd);

2 Ответов

Рейтинг:
1

nv3

Похоже, что пунктирная область просвечивает сзади. Решением может быть изменение освещения карты-избегайте освещения с обратной стороны.

Если вы не можете изменить освещение, я бы попытался увеличить размер гауссовского размытия примерно вдвое больше размера точки расстояния в этом узоре. Вам также придется использовать динамическое пороговое значение, то есть пороговое значение должно варьироваться в зависимости от вашего изображения (вы можете подготовить соответствующую маску и функцию вычитания для этого). В общем, вы уже на правильном пути. Это всего лишь относительно сложный исходный образ.


Рейтинг:
1

PotatoSoup

Много лет назад я работал в компании, занимающейся примерно тем, что вы описываете. Я использовал CorelDRAW и CorelTRACE, а также файл сценария для автоматизации этого процесса. Я мог бы описать, как это сделать с помощью C++ (не .net и не Visual C++).

Для приложения:

В C++;

Для этого не используйте размытие любого вида. Для этого держитесь подальше от любых размытых пятен. Ваша директива должна состоять в том, чтобы удалить все лишнее из вашего образа, а затем работать с тем, что осталось. Размытие повреждает этот процесс.

Удалите все цвета, которые не являются черными или близкими к нему, как темную версию какого-то цвета. Не делайте этого с помощью серого масштабирования. Не делайте этого путем уменьшения количества бит на пиксель и количества цветов.

Удаляйте другие цвета по одному пикселю за раз, Преобразуя все удаленные пиксели в белый RGB(255,255,255), а не в прозрачный. Для этого процесса напишите код, чтобы включить ползунок, который вы можете настроить, сколько темных цветов вы сохраняете.

Сохраните результат как "Clean.bmp" или что-то еще, что вам очевидно.

Скопируйте результат на другое новое изображение и преобразуйте его в 2 цвета черно - белый.

Сохраните новое изображение как "bw.bmp" или что-то, что вам очевидно.

Используйте непосредственно (или подкласс и имейте свой собственный исполняемый файл для управления им) CorelTRACE (который входит в состав более старых версий (~2000AD) CorelDRAW для "трассировки" bw.bmp .

Отрегулируйте прорисованное изображение внутри CorelDRAW и очистите края. Объединяйте узлы как можно больше, не повреждая конечное изображение (эту часть я обычно делал с помощью скрипта на изображениях, которые были буквально повреждены несколькими случаями).

Сравните прослеженный bw.bmp с очищенным.bmp, чтобы увидеть, насколько близко вы подходите. Используйте это сравнение для настройки "трассировки" в процессе CorelTRACE.

Конечный результат может шокировать вас тем, насколько он близок к оригиналу.

Вы должны быть в состоянии легко использовать общий OCR на нем.

Если где-либо в этом процессе оборудование или программное обеспечение, которое вы используете, или даже ваша операционная система трудны для вас, вернитесь к оборудованию и/или программному обеспечению до 2004 года и/или операционной системе. Не спрашивайте меня почему, потому что я не хочу, чтобы меня пылали за то, что я говорю правду о том, что сегодня выпихивают на публику.