Сохранение связности линий на изображении с помощью OpenCV

Я работаю над проблемой распознавания рукописных цифр, используя OpenCV для предварительной обработки и Keras / Tensorflow для вывода. У меня проблема с потерей определенных функций при предварительной обработке, которая примерно состоит из:

  1. Порог Оцу
  2. Расширение (чтобы толщина цифр была такой же, как у другого набора данных, который я использовал для предварительного обучения моей нейронной сети)
  3. Уменьшение размера до 28x28 пикселей с использованием cv2.INTER_AREA (опять же, чтобы соответствовать данным до обучения)

Вот пример потери функции:

введите описание изображения здесь

Это должно быть два, и крошечный промежуток в верхнем цикле важен, чтобы помочь отличить его от 9 или 8. Но моя предварительно обработанная версия теряет промежуток, поэтому цикл выглядит закрытым.

Я уже задавал аналогичный вопрос для сохраняя дыры и получил отличный ответ, хотя я думаю, что мне нужно его обобщить.

Так же, как одна из моих собственных идей: может быть, есть способ добавить второе более крупное ядро ​​к операции расширения. Это ядро ​​будет иметь ту же форму, что и ядро ​​расширения, но будет иметь только контур (а не заливку). Затем, если этот контур касается любых белых пикселей в исходном изображении, аннулируйте действие расширения для этой позиции.

Примечание. Не стесняйтесь оставлять комментарий с лучшим способом изложения этого заголовка («связность» - это все, что я мог придумать).


person Alexander Soare    schedule 21.01.2020    source источник


Ответы (1)


Скелетизируйте фон первого изображения (см. https://medium.com/analytics-vidhya/skeletonization-in-python-using-opencv-b7fa16867331 или есть ли какая-либо встроенная функция, которая может выполнять скелетонизацию в openCV?). Используйте логическую операцию между скелетом и вторым изображением.

person Alex Alex    schedule 04.05.2020