Адаптивный порог с размытым изображением
Я нахожусь в поиске лучшего метода адаптивного порога для бинаризации изображения. Но у меня проблемы с темным и размытым изображением.
Входное изображение:
и когда я использую метод адаптивного порога, я получаю это
Выходное изображение:
Это не хорошо для меня!
Итак, кто-то может помочь мне решить эту проблему?
другое изображение:
а также:
первое кажется очень плохим с @Hammer'solution (я должен выбрать канал c), второе я могу использовать нормальный адаптивный порог.
поэтому я хочу найти лучшее решение для всех случаев.
Еще раз спасибо!
4 ответа
Кажется, что цвет является гораздо лучшим показателем сегментации в вашем изображении, чем интенсивность. Попробуйте преобразовать его в HSV и затем запустить OTSU на канале H.
в питоне
hsv = cv2.cvtColor(image, cv2.cv.CV_BGR2HSV)
cv2.imshow('hsv', hsv[:,:,0])
(thresh, im_bw) = cv2.threshold(hsv[:,:,0], 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow('OTSU', im_bw)
дает (хсв)
а потом (ОЦУ)
Немного размывает и расширяет, и вы должны быть хорошими, чтобы идти
Возможно, вас заинтересуют эти адаптивные пороги, используемые openCV.
Я использовал адаптивный средний порог. Возможно, вам придется немного поиграть с параметрами, но если ваши изображения похожи (того же размера и т. Д.), Надеюсь, не потребуется слишком много настроек.
# Smooth image
filtered = cv2.adaptiveThreshold(input_image.astype(np.uint8), 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 41, 3)
# Some morphology to clean up image
kernel = np.ones((5,5), np.uint8)
opening = cv2.morphologyEx(filtered, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel)
Результаты:
Следующий код...
im=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,111,3)
cv2.imshow('mkm',im)`
... дает хороший результат:
Если одного порога недостаточно для разделения всех изображений, вы можете попробовать алгоритм Watershed с двумя порогами.
Используйте верхний порог, чтобы получить изображение с сегментами, которые определенно являются частью цифры, и высокий обратный порог, чтобы получить изображение с сегментами, которые определенно не являются частью цифры.
Немного размыть оба изображения, чтобы повысить достоверность.
Тогда используйте 2 изображения как семена для Водораздела.