- вход - np.array, 2d картинка - темный фон, светлые фигуры
- фигуры могут быть квадратами, кругами и треугольниками
- выход - rgb картинка, на которой квадраты раскрашены в свой цвет, круги - в свой, треугольники - в свой
- Фигуры не пересекаются
- Фигуры могут быть повернутыми
- Фигуры могут иметь разный размер
- Треугольники могут быть любыми - прямоугольными, тупоугольными, разносторонними, с разными углами
- тесты
- оформить в псевдорепозиторий
- докстринги и адекватное написание
- несколько вариантов и переключение способов
- Установите зависимости из
requirements.txt
python -m pip install -r requirements.txt
- Установите пакет
python -m pip install -e .
python -m pytest -vv
python main.py --src_fpath <путь до входного файла> --dst_fpath <путь до выходного файла>
- Находим на картинке все индивидуальные фигуры как связанные компоненты
- Каждую из них заключаем в bounding box с небольшим паддингом и рескейлим с сохранением соотношения сторон так, чтобы меньшая сторона имела размер 101 - не хотим тратить много времени на большие фигуры
- Ищем центр - двумерную медиану - внутри фигуры
- Находим пиксели, относящиеся к границе фигуры (вычитаем из фигуры фигуро после эрозии)
- Находим матрицу дистанций между центром фигуры и пикселями на границе
- ПРОВЕРКА НА КРУГЛОСТЬ
- Если отношение стандартного отклонения расстояний от центра до границы к среднему расстоянию меньше 0.05 - это круг
- Пробуем вписать в фигуру окружность
- Находим минимальное расстояние от центра до границы
- Рисуем окружность с центром в найденном на шаге 3 центре и радиусом, равному минимальному расстоянию от центра до границы + 5
- Вычитаем из фигуры вписанную в нее окружность
- Ищем связанные компоненты, фильтруем по площади 10 px.
- ПРОВЕРКА НА КВАДРАТНОСТЬ
- Если количество связанных компонент равно 4, это квадрат
- ПРОВЕРКА НА ТРЕУГОЛЬНОСТЬ
- Если дошли до этого шага, фигура - треугольник*.
* Найденный центр не является центром описанной окружности для треугольника и не делит его на связные компоненты, каждая из которых относится к определенному углу.