Есть 2 изображения. в одном конутуром охвачен весь объект а в другом объект охвачен 2-мя контурами (или больше). Как сравнить Hu моменты? Насколько я понимаю моменты высчитываются из одного контура. То есть для второго изображения нужно объеденить контуры в один, а затем уже посчитать моменты. Так же есть упоминание о связанных компонентах, но все что я о них смог найти — это параметр для функции FindContours. Находит оно все-равно те же 2 и более котуров в силу качества изображения. Как правильно поступить в такой ситуации?
Наглядно о проблеме. Красное — самый большой контур. Желтое — остальные контура (мелочь отфильтрована). Слева просто фильтр кенни (перед ним сглаживание гауса и эквализация)
Попытайтесь объединить контуры: просмотрите крайние точки контуров и найдите близкие, а затем, выстроив замкнутую цепочку связанных контуров, получите один — полный.
P.S. Пилю как раз в свободное время свой велосипед, пока что попытки ускорить процесс обнаружения контуров успехом не увенчались: если через пиксель проходит несколько контуров разного уровня, получаю разрыв.
В моем случае подходит обычный фильтр canny с последующим поиском контуров через связанные компоненты. Только вот беда в том, что везде пишут что связанные компоненты именно для того и придуманы, что бы можно было сравнить их так вот эллегантно… но на деле не нашел способа.
+ все изображения получаются с помощью iPhone 3Gs у которого камера неакти какая. Посему часть контура размыта и не поддается распознанию.
Да, если у вас разрывы получаются небольшими, можно попробовать уменьшить разрешение (например, НЧ фильтрацией, медианной фильтрацией, вейвлет-фильтрацией и т.п.).
Проблема в том что картинки покачеству очень сильно различаются. На картинках… лампочки. По ТЗ стоит задача обработки фотографий сразличных устройств. В любом случае, задача сейчас сводится к получению общего контура изображения или же его части для последующего сравнения через Hu моменты. Сейчас вот сижу эксперементирую.