Сегментация текста на текстах, закрытых объектами
Я работаю над проектом по извлечению символов номерного знака. Я разработал метод MSER для сегментирования символов для номерных знаков со сложным фоном, и он работает хорошо. Проблема заключается в том, что в некоторых случаях, как показано ниже, рамка (держатель номерного знака) номерного знака соединяется или занимает часть символов. Обладая почти одинаковым цветом, символы и рамка становятся единым объектом. Невозможно извлечь эти символы из фрейма, поэтому я не могу обнаружить символы.
Я посмотрел вокруг, может ли "Горизонтальная проекция" номерного знака принести что-то полезное, но, похоже, для его применения требуется хороший алгоритм коррекции перекоса перед его применением, что может оказаться не лучшим решением для решения этой проблемы, поскольку требуется ряд новых алгоритмов. Поэтому я хотел спросить здесь, существует ли такой хороший путь, и вы указали мне правильный путь.
Заранее спасибо.
(ps: я размыл часть номерных знаков, чтобы защитить частную жизнь. Качество изображений не ухудшает, но я думаю, что этого достаточно, чтобы понять проблему)
1 ответ
Вы можете попробовать ограничить область интереса с помощью логической маски, прежде чем сегментировать символы. Давайте сделаем один с выпуклой оболочкой, они действительно универсальны:
Использование Matlab 2016b:
Plate = imread(Plate.jpg);
grayPlate = rgb2gray(Plate); % rgb -> grayscale
bwPlate = imbinarize(grayPlate); % binarize, Otsu's method.
bwPlate = imopen(bwPlate, strel('disk', 4));
% Morphological opening, removes small white areas. These bloat the convex
% hull if let through.
convPlate = bwconvhull(bwPlate);
for i=1:3 %Apply the logical mask
tempPlate = Plate(:,:,i);
tempPlate(~convPlate) = 255;
Plate(:,:,i) = tempPlate;
end
Результат:
Автомобильные профи сделали нашу жизнь немного сложнее. Но это должно быть намного проще, особенно если вы возитесь с весами в градациях серого, бинаризацией и фильтрацией.