Сопоставление шаблонов, как правило, не является надежным для такого рода приложений из-за несоответствий освещения, изменений ориентации, изменения масштаба и т. Д. Типичным способом решения этой проблемы является внедрение машинного обучения. То, что вы пытаетесь сделать, обучая свой собственный повышающий классификатор, является одним из возможных подходов. Тем не менее, я не думаю, что вы делаете обучение правильно. Вы упомянули, что дали 1 логотип в качестве положительного тренировочного изображения и 5 других изображений, не содержащих логотип в качестве отрицательных примеров? Как правило, вам нужны обучающие образцы порядка сотен или тысяч и более. Вы не можете тренироваться с 6 тренировочными образцами и ожидать, что это сработает.
Если вы не знакомы с машинным обучением, вот примерно что вы должны сделать:
1) Вам необходимо собрать много положительных обучающих образцов (от ста и далее, но, как правило, тем больше, тем лучше) объекта, который вы пытаетесь обнаружить. Если вы пытаетесь обнаружить отдельные символы на изображении, то получите обрезанные изображения отдельных символов. Вы можете начать с базы данных MNIST для этого. Еще лучше, чтобы подготовить классификатор к вашей конкретной проблеме, получить много обрезанных изображений персонажей в автобусе из фотографий. Если вы пытаетесь обнаружить всю прямоугольную светодиодную панель, то используйте их изображения в качестве положительных тренировочных образцов.
2) Вам нужно будет собрать много отрицательных тренировочных образцов. Их количество должно быть в том же порядке, что и количество положительных тренировочных образцов, которые у вас есть. Это могут быть изображения других объектов, которые появляются на изображениях, на которых вы будете запускать детектор. Например, вы можете обрезать изображения передней части автобуса, дорожных покрытий, деревьев вдоль дороги и т. Д. И использовать их в качестве негативных примеров. Это должно помочь классификатору исключить эти объекты на изображении, на котором вы запускаете детектор. Следовательно, отрицательными примерами являются , а не просто изображение, содержащее объекты, которые вы не хотите обнаруживать . Это должны быть объекты, которые могут быть ошибочно приняты за объект, который вы пытаетесь обнаружить на изображениях, на которых работает детектор (по крайней мере, для вашего случая).
См. Следующую ссылку о том, как обучить каскад классификатора и создать файл модели XML: http://note.sonots.com/SciSoftware/haartraining.html
Несмотря на то, что вы упомянули, что вы хотите обнаруживать только отдельные символы вместо всей светодиодной панели на шине, я бы рекомендовал сначала обнаружить светодиодную панель, чтобы локализовать область, содержащую интересующие вас символы. После этого либо выполните сопоставление с шаблоном в пределах этой меньшей области, либо запустите классификатор, обученный распознавать отдельные символы на участках пикселей в этой области, полученных с использованием подхода скользящего окна, и, возможно, в нескольких масштабах. (Примечание. Классификатор усиления haarcascade, который вы упомянули выше, будет обнаруживать символы, но он не скажет вам, какой символ он обнаружил, если только вы не обучите его обнаруживать этот конкретный символ ...) Обнаружение символов в этой области в режиме скользящего окна даст В вашем порядке появляются символы, чтобы вы могли связать их в слова и т. д.
Надеюсь, это поможет.
EDIT:
Я случайно наткнулся на этот старый пост после отдельного открытия текстового модуля сцены в OpenCV 3, упомянутого @ KaolinFire.
Для тех, кому интересно, это результат запуска этого детектора на образце изображения, заданном ОП. Обратите внимание, что детектор может локализовать текстовую область, даже если он возвращает более одной ограничительной рамки.
Обратите внимание, что этот метод не является надежным (, по крайней мере, эта реализация в OpenCV с параметрами по умолчанию ). Это имеет тенденцию генерировать ложные срабатывания, особенно когда входное изображение содержит много «отвлекающих факторов».
Вот еще примеры, полученные с использованием этого детектора текста OpenCV 3 в наборе данных Google Street View:
Обратите внимание, что он имеет тенденцию находить «текст» между параллельными линиями (например, окна, стены и т. Д.).Поскольку входное изображение OP, скорее всего, будет содержать сцены вне помещения, это будет проблемой, особенно если он / она не ограничивает область интереса меньшей областью вокруг светодиодных знаков.
Кажется, что если выспособны локализовать «грубую» область, содержащую только текст (например, только светодиодный знак в образце изображения ОП), тогда использование этого алгоритма поможет вам получить более жесткую ограничивающую рамку.Но вам придется иметь дело с ложными срабатываниями (возможно, отбрасывая небольшие области или выбирая между перекрывающими ограничивающими прямоугольниками, используя эвристику, основанную на знании того, как буквы появляются на светодиодных знаках).
Вот ещересурсы (обсуждение + код + наборы данных) по обнаружению текста.
Код
Наборы данных
Здесь вы найдете Google StreetView и наборы данных MSRA.Хотя изображения в этих наборах данных не совсем совпадают с изображениями светодиодных знаков на шинах, они могут быть полезны либо для выбора «наилучшего» алгоритма выполнения из нескольких конкурирующих алгоритмов, либо для обучения алгоритму машинного обучения с нуля.
http://www.iapr -tc11.org / mediawiki / index.php / Datasets_List