Как классифицировать изображения краев, которые принадлежат двум сильно изменяемым, но различимым классам, по краям (контурам) «криволинейность»

Вступление

Я работаю над проектом в OpenCV на C ++ и пытаюсь классифицировать небольшое изображение (кадр из видео), содержащее множество ребер, на две группы. Я также хотел бы сохранить информацию о том, насколько близко изображение находится к классу A или классу B, потому что эта классификация не кажется просто бинарной проблемой — иногда изображения представляют собой смесь классов A и B.

Класс A можно приблизительно определить по наличию изогнутых / гладких краев, похожих на арки или части эллиптических структур, которые часто ориентированы в некоторый центр (как в туннеле).

Другой класс, класс B, обычно очень хаотичен, и края на таком изображении определенно менее извилистые, они часто извилистые и обычно не имеют какого-либо «центра внимания».

Классы:

Изображения из обоих классов находятся в следующих ссылках:
Группа А
Группа Б

Предыдущие подходы и идеи

Я пытался отделить каждый достаточно длинный контур и затем вычислить какой-то коэффициент кривизны / кривизны — в основном я уменьшил частоту контура (на 10), затем я прошел по новому контуру и рассчитал среднее значение абсолютного угла между двумя сегментами, созданными 3 последовательных очка. Затем на основе этого значения я определил, является ли текущий контур «извилистым» или нет. В соответствии с этим я рассчитал несколько функций:

  • общая длина пышных контуров / общая длина всех контуров
  • количество пышных контуров / количество всех контуров
  • и т.п.

Однако вычисление самой кривизны, по-видимому, работает не очень надежно (в одном кадре контур считается изогнутым, во втором — тот же контур с слегка измененной формой, и т. Д.), А также задает порог для определения того, какой контур является изогнутым. а что нет (основываясь на «средних кривых одного контура»), трудно установить правильно. Кроме того, такой подход никоим образом не учитывает специфическую «форму» класса А, и поэтому результаты классификации очень плохие.

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

Я читал о некоторых способах сравнения карт границ, таких как сопоставление Хаусдорфа, но в моем случае это не очень помогает. Кроме того, важно, чтобы я хотел сохранить алгоритм простым, потому что он должен уметь работать в режиме реального времени, а также является лишь частью более крупного программного обеспечения.

Наконец, мой вопрос:

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]