Входное изображение:
Ожидаемый результат:
Я собираюсь уместить три (или некоторое количество) многоугольников (в данном случае прямоугольников), чтобы обозначить «большие» белые пятна на этом изображении. Прямоугольники, нарисованные на выходном изображении, соответствуют моему восприятию белых областей. Я не ожидаю, что алгоритм предложит те же самые области строения. Я хочу разместить некоторое количество плотных многоугольников вокруг кластеров белых пикселей.
Мое первоначальное решение заключалось в нахождении контуров для этого изображения и подгонке замкнутого выпуклого многоугольника вокруг каждого контура путем нахождения выпуклой оболочки точек в каждом контуре.
Однако, поскольку белые области сильно фрагментированы с черными областями внутри и выступами по краям, количество контуров, возвращаемых cv2.findContours, очень велико (около 500 или около того). Из-за этого установка выпуклой оболочки не улучшает форму белых областей. Белые области в основном сохраняют свои первоначальные абстрактные формы. Моя цель состояла в том, чтобы объединить множество маленьких контуров белой области в единый, содержащий контур, по которому я затем смогу разместить выпуклую оболочку.
Как мне решить эту проблему? Следует ли мне сначала использовать алгоритм кластеризации по точкам контура, чтобы найти контуры, которые близки друг к другу?