Как находить эллипсы на изображении?

Есть картинка: 5d3d935f4d6e1614165215.jpeg
Мне нужно выделить комель у деревьев.
Я вначале делаю кластеризацию kmeans, потом применяю Canny и у меня получается такое изображение:
5d3d9599c477e868010104.jpeg
Как мне дальше выделить эти эллипсы? Контуры могут быть не замкнуты, может быть видно только 2/3 эллипса из-за снега, тени или других помех. HoughCircles в OpenCV работает только в идеальных условиях и только с кругом, но не с эллипсом. Как мне решить эту задачу?
  • Вопрос задан
  • 858 просмотров
Пригласить эксперта
Ответы на вопрос 5
alternativshik
@alternativshik
может, сначала надо картинку как-то обработать еще? типа убрать цвет, поднять контраст и тп, чтобы было меньше помех от теней, снега, коры итп?
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Нужно искать не эллипсы, а хордовые сектора - "дольки" (апельсина, например).
1. После того, как найден такой сектор (не менее 1/3 площади круга): нужно определить центр и залить до границ, не выходящих за круг, образованный этим сектором при вращении вокруг центра круга (с радиусом этого сектора).
2. После нахождения - вырезаем торец бревна и снова ищем сектор.
Сколько таких будет - столько и брёвен на фото.

"Дольку" найти просто - находим светлую зону и сверяем геометрию границ (ищем дугу) с заданной точностью. По дуге - находим радиус.

PS: Если усложнить, то по контуру найденной дуги нужно восстановить контур эллипса, которому она принадлежит.
Ответ написан
Комментировать
@tlbogdanov
HoughCircles в OpenCV работает только в идеальных условиях и только с кругом, но не с эллипсом. Как мне решить эту задачу?


Предлагаю залезть в этот класс, посмотреть, как там определяется круг. Если там что-то вокруг формул окружности - замените формулой эллипса, если там что-то вокруг погрешности определения пикселей - частей круга, попробуйте эту погрешность увеличить, что будет? - технически, дерево это не эллипс, мб нужно убрать из опенсв такую строгость ручками..

Если с тем, что я предложил, не выгорит, можно попробовать сделать всё самому.
У Вас в примерах картинок нет никакого отсеивания мусора, наверно, стоит этим заняться.
Есть методы эрозии и дилатации, примененные в некоторой последовательности, они помогут Вам убрать ненужные артефакты там, где они не нужны, и достроить ваши эллипсы до завершенных фигур.

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

Напишите, пожалуйста, что у вас получилось в итоге, интересно
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
Неправильно выбран инструмент.
Задача легко решается с помощью нейросетей типа Unet, ориентированных на сегментацию изображений.
Ответ написан
Комментировать
Решение этой задачи с помощью histogram oriented gradients и random forest ceur-ws.org/Vol-1909/paper2.pdf Екатеринбургский университет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы