Я хочу обнаружить кандидатов в номерные знаки, используя разные методы, но я застрял после попытки несколько раз.Интересно, правильный ли мой подход.
Я работаю с моделью изображения 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.
Пример обработанного изображения (у меня пока недостаточно репутации для публикации изображений ...)
Я ожидаю, что на выходе будет изображение с контурами потенциальных кандидатов на пластину, но я не могу получить правильно преобразованное изображение для работы.Что я должен делать?Как должны применяться преобразования (и какой тип).