Удалить круги из технического чертежа - PullRequest
3 голосов
/ 05 ноября 2019

При распознавании технического чертежа большинство (все?) Движков ocr имеют проблемы с геометрией окружения и иногда ошибочно интерпретируют линию как букву.

Чтобы улучшить качество распознавания, я сначала хочу удалить из рисунка определенные элементы, в основном круги и прямоугольники.

Все рисунки черно-белые и выглядят оченьаналогично приведенному ниже примеру.

Каков наилучший способ добиться этого? Я немного поиграл с имиджевой магией и opencv ...

tech drawing

1 Ответ

1 голос
/ 06 ноября 2019

Вот частичное решение. Эту проблему можно разбить на два этапа:

1) Удалите прямоугольники, удалив горизонтальные + вертикальные линии

Мы создаем вертикальные и горизонтальные ядра, а затем выполняем морфинг вблизи, чтобы обнаружитьлинии. Отсюда мы используем побитовые операции для удаления строк.

Обнаружены вертикальные линии (слева) и горизонтальные линии (справа)

image image

Удалены линии

image

import cv2

image = cv2.imread('1.jpg')

vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,15))
remove_vertical = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, vertical_kernel)

horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15,1))
remove_horizontal = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, horizontal_kernel)

result = cv2.add(cv2.add(remove_vertical, remove_horizontal), image)

cv2.imshow('result', result)
cv2.waitKey()

2) Обнаружение / удаление кругов

Существует несколько подходов для удаления кругов

  1. Использование cv2.HoughCircles(). Вот хороший учебник по обнаружению кругов на изображениях с использованием Hough Circles
  2. Создание ядра cv2.MORPH_ELLIPSE с использованием cv2.getStructuringElement(), затем выполнение морфологических операций для выделения контуров окружности
  3. Используйте простое обнаружение формы с аппроксимацией контура и фильтрацией контура для обнаружения окружностей. Этот метод использует cv2.arcLength() и cv2.approxPolyDP() для аппроксимации контура. Одним из недостатков этого метода является то, что он работает только с «идеальными» формами. Взгляните на обнаружение простых геометрических фигур и обнаружение формы opencv
...