roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 01:31

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Сегментация движений (Motion segmentation)
СообщениеДобавлено: 06 июн 2007, 15:29 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Здравствуйте.

  Я работаю в IT-компании, и вмести с моими коллегами, мы разрабатываем
программное обеспечение, способное вдохнуть жизнь в новые аппаратные
комплексы. Параллельно с моей основной работой я занимаюсь исследованиями
в области компьютерного зрения. Целью исследования является поиск машинных
методов трехмерного восприятия реального мира.

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

  Сейчас я занимаюсь сегментацией движений.  Сегментация по движениям
мне нужна для определения границ объектов (то есть первичной информации
об объектах которые "видит" камера, изначально не зная как выглядят объекты сцены).
После определения первичной информации о границах объектов, можно выделить ряд признаков,
которые характеризуют объект, выполнить классификацию объектов по вектору признаков,
и в дальнейшем будет возможным опознавать ранее классифицированные объекты
даже по одному единственному кадру.

  Мне удалось разработать вполне приемлемый алгоритм расчёта карты векторов движений
пикселей в видеопоследовательности, но извлечь от туда границы объектов пока не удаётся.

Изображение
http://edv-detail.narod.ru/vm0001.jpg

  Получается забавная ситуация, зрительно объекты отчётливо видны на карте движений
(визуализация: направление-скорость -> цвет-яркость), а получить чёткие границы
объектов не удаётся (ну прям видит око да зуб неймёт).

Я испробовал три способа:

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

Изображение
http://edv-detail.narod.ru/m1vm0001.jpg

  Второй вариант: по карте движений строится гистограмма направления-движения,
определяются кластера гистограммы, остальные точки гистограммы распределяются между кластерами.
По полученной гистограмме и карте движений строится гистограммная проекция,
после чего сегментация проекции. Результат тоже не ахти.

Изображение
http://edv-detail.narod.ru/hist0001.jpg

  Ну и наконец третий вариант: по карте движений строим гистограммы направления-движения
для каждого сегмента изображения, потом для всех соседних сегментов определяем степень похожести
их гистограмм. По пороговому значению объединяем похожие сегменты.

Исходное сегментированное изображение:

Изображение
http://edv-detail.narod.ru/m3seg0001.jpg

После объединения похожих фрагментов:

Изображение
http://edv-detail.narod.ru/m3fseg0001.jpg

К сожалению и тут результаты не радуют.

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


Последний раз редактировалось EDV 12 июл 2007, 17:08, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 июн 2007, 16:52 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Боюсь в этой области вы самый продвинутый на этом форуме. Т. к. это ваша работа, а здесь в основном любители. Я максимум что делал так это следил за перемещением пятна от лазерного фонарика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 июн 2007, 17:49 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Цитата:
Боюсь в этой области вы самый продвинутый на этом форуме. Т. к. это ваша работа, а здесь в основном любители. Я максимум что делал так это следил за перемещением пятна от лазерного фонарика.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сегментация движений (Motion segmentation)
СообщениеДобавлено: 06 июн 2007, 20:05 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Добрый день!

EDV писал(а):
Мне удалось разработать вполне приемлемый алгоритм расчёта карты векторов движений
пикселей в видеопоследовательности, но извлечь от туда границы объектов пока не удаётся.

Есть подозрение, что именно на этом этапе вы уничтожаете четкие границы объектов и после этого восстановить их уже невозможно.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 июн 2007, 21:09 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Цитата:
Гипотеза - если на выходе алгоритма кроме векторов выдавать еще и скаляр "качество распознавания вектора", который у вас скорее всего сгенерировать проще простого, то применив к полученной карте "неопределенности направления" несложные преобразования и выделения границ - вы получите искомые границы.

[off]Во загнул.  :shock: [/off]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 июн 2007, 21:45 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
[off]тсссс
серьёзные люди разговаривают
вот на таких отечественная робототехника зиждется![/off]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2007, 00:39 
Не в сети
Аватара пользователя

Зарегистрирован: 08 окт 2004, 16:43
Сообщения: 2114
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий
А вы что знаете вектор движения каждого пиксела?
Если так(во что я не верю), то чем плох алгоритм сегментации, но не 3-х мерного (RGB),  а 4-мерного изображения (RGB+вектора). Достаточно будет, я думаю, сменить меру в пространстве.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2007, 09:58 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Виталий писал(а):
А вы что знаете вектор движения каждого пиксела?
Если так(во что я не верю), то чем плох алгоритм сегментации, но не 3-х мерного (RGB),  а 4-мерного изображения (RGB+вектора). Достаточно будет, я думаю, сменить меру в пространстве.

А смысл? Задача же вроде распознать тела, а не пятна на них?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2007, 10:46 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Значит, что бы устранить всякие неясности, рассказываю, как я получаю карту движений:
1. сегментируем исходное изображение;
2. для каждого сегмента по периметру находим точки излома линии контура
   (контур сегмента преобразовывается в ломаную, соответственно находим точки излома);
  a) найденные точки каждого сегмента, прослеживаем по изображениям двух смежных кадров
     с помощью block matching. Берём блок пикселей исходного изображения размером 17x17
     с центром соответствующем прослеживаемой точке, затем находим разницу по абсолютному
     значению между искомым блоком и блоками в следующем кадре в окрестности прослеживаемой точки.
     Находим минимальную разницу между искомым блоком и блоком в следующем кадре и определяем
     смещение прослеживаемой точки (dX, dY);
  b) аппроксимируем значение смещения каждого пикселя сегмента по значениям смещений
     прослеживаемых контурных точек этого сегмента;
3. полученную карту векторов движения складываем с предыдущей  картой движения и размываем Гауссом.

Цитата:
Гипотеза - если на выходе алгоритма кроме векторов выдавать еще и скаляр "качество распознавания вектора", который у вас скорее всего сгенерировать проще простого, то применив к полученной карте "неопределенности направления" несложные преобразования и выделения границ - вы получите искомые границы.


не понятно, если можно по подробнее  :?

Цитата:
чем плох алгоритм сегментации, но не 3-х мерного (RGB),  а 4-мерного изображения (RGB+вектора). Достаточно будет, я думаю, сменить меру в пространстве.


Если замешать сюда RGB, то мы получим цветовую сегментацию а не сегментацию движений (появятся границы обусловленные перепадами яркости-цвета).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2007, 12:42 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Исправил одну незначительную ошибку в программе, четкость вроде получше стала,
правда на конечные результаты это особо не влияет.

Карта движений теперь выглядит так:

Изображение


Последний раз редактировалось EDV 12 июл 2007, 17:11, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2007, 12:57 
Не в сети
Аватара пользователя

Зарегистрирован: 08 окт 2004, 16:43
Сообщения: 2114
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий
Цитата:
А смысл? Задача же вроде распознать тела, а не пятна на них?

Это будет зависеть от меры, учет цветовых данных может быть минимальным, ведь так? =)

Может попробовать как-то сгонять вектора во "фронты" движения? Чем больше векторов придерживаются фронта, тем больше объект и мощнее фронт. А также можно ввести степени "доверия" фронтам в зависимости от мощности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2007, 15:10 
Не в сети

Зарегистрирован: 01 окт 2005, 00:56
Сообщения: 157
Откуда: С.-Петербург
EDV писал(а):
2. для каждого сегмента по периметру находим точки излома линии контура
   (контур сегмента преобразовывается в ломаную, соответственно находим точки излома);

точки излома - имеете ввиду точки, где нарушается выпуклость?
если да, то почему именно такие точки? Есть ведь признаки с большой стабильностью, например точки с большой кривизной (детектор Harris'а).

Если вы сделали сегментацию в п.1, то какого рода улучшение картинки вы хотите в дальнейшем? Все следующие шаги по-сути на форму краев не влияют, а только ищут сопряженные в следующих кадрах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2007, 15:47 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Цитата:
точки излома - имеете ввиду точки, где нарушается выпуклость?


Аппроксимация контура выполняется с помощью библиотечной функции cvApproxPoly библиотеки Inte OpenCV. Думаю если показать визуально, будет понятней:

Изображение

Цитата:
Если вы сделали сегментацию в п.1, то какого рода улучшение картинки вы хотите в дальнейшем? Все следующие шаги по-сути на форму краев не влияют, а только ищут сопряженные в следующих кадрах.


После сегментации получается много мелких фрагментов, которые не дают ответ на вопрос: «Сколько мы видим объектов сцены, и каковы их границы». Вот это я и собираюсь выяснить с помощью сегментации движений.


Последний раз редактировалось EDV 12 июл 2007, 17:12, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2007, 15:58 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
EDV писал(а):
Значит, что бы устранить всякие неясности, рассказываю, как я получаю карту движений:

Ой :) ничего вы загнули, тогда действительно не подходит мой совет. А классические подходы Optical Flow не пользовали?

А так да - после сегментации уже ничего не восстановить, вы там всё грохнули.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2007, 17:03 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Цитата:
А классические подходы Optical Flow не пользовали?


   А что бы это мне дало? Мне же не нужно прослеживать перемещение так называемых feature points на N-ное количество кадров (да и вообще для трекинга лучше использовать CONDENSATION алгоритм http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/ISARD1/condensation.html).
   Мне нужно получить карту движений, которая описывает характер движения объектов сцены в общем, что бы потом извлечь от туда информацию об объектах.

   A Optical Flow вообще работает с «corner sub-pixel», и его устойчивость зависит от наличия таких особенных точек (то есть изображение должно быть контрастным, с четкими границами), а если камера например облако движущееся заснимет, тогда он и вовсе работать не будет.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO