Нахождение пластины-кандидата различными методами - PullRequest
0 голосов
/ 23 января 2019

Я хочу обнаружить кандидатов в номерные знаки, используя разные методы, но я застрял после попытки несколько раз.Интересно, правильный ли мой подход.
Я работаю с моделью изображения HSV.
Мой подход к известным методам до сих пор.
1. Предварительно обработанное изображение -> морфологическое преобразование ->Обнаружение BLOB-объектов.
2. Предварительно обработанное изображение -> Обнаружение контуров -> Обнаружение прямоугольников в изображении.
3. Предварительно обработанное изображение -> Обнаружение контуров -> Проекция гистограммы -> Анализ гистограммы

Не знаюхочу сосредоточиться на методе 3, поскольку кто-то еще работает над ним.Должен ли я где-нибудь использовать анализ подключенных компонентов?
Я использую операции BlackHat и TopHat с гауссовым размытием и адаптивным порогом для предварительной обработки изображений.Вот мой код:

imgHSV = np.zeros((self.height, self.width, 3), np.uint8)
imgHSV = cv.cvtColor(self.image, cv.COLOR_BGR2HSV)
_, _, self.imgValue = cv.split(imgHSV)
imgTopHat = np.zeros((self.height, self.width, 1), np.uint8)
imgBlackHat = np.zeros((self.height, self.width, 1), np.uint8)

structuringElement = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))

imgTopHat = cv.morphologyEx(self.imgValue, cv.MORPH_TOPHAT, structuringElement)
imgBlackHat = cv.morphologyEx(self.imgValue, cv.MORPH_BLACKHAT, structuringElement)
imgGrayscalePlusTopHat = cv.add(self.imgValue, imgTopHat)
imgGrayscaleHSV = cv.subtract(imgGrayscalePlusTopHat, imgBlackHat)

imgBlurred = np.zeros((self.height, self.width, 1), np.uint8)
imgBlurred = cv.GaussianBlur(imgGrayscaleHSV, GAUSSIAN_SMOOTH_FILTER_SIZE, 0)
thresholdedImage = cv.adaptiveThreshold(imgBlurred, 255.0, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY_INV, ADAPTIVE_THRESH_BLOCK_SIZE, ADAPTIVE_THRESH_WEIGHT)

Под предварительно обработанным изображением я имею в виду изображение после извлечения Value, выполнения операций TopHat и BlackHat, размытия по Гауссу и адаптивного определения порогов.Я попытался найти simpleBlob с использованием openCV, но он не работает должным образом с подготовленным изображением.Что касается обнаружения краев, я использую обнаружение краев Canny и реализовал распознавание краев sobel.

Пример обработанного изображения (у меня пока недостаточно репутации для публикации изображений ...)

enter image description here

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

1 Ответ

0 голосов
/ 24 января 2019

Я пытался использовать разные методы для обнаружения пластин: 2 и 3. Они практически не работают.

Лучшие методы - на основе ML.Например, самый простой на каскадах HAAR .HOG + SVM работает лучше.И подходы на основе DNN являются лучшими - от Intel с предварительной информацией (вы можете использовать его с opencv_dnn с механизмом вывода OpenVINO).

Не тратьте время на ручное управлениеалгоритмы.

...