roboforum.ru

Технический форум по робототехнике.

Зрение

Зрение

Сообщение Outcaster » 04 дек 2004, 15:03

Сабж, собстно.
Подумывал устанавливать на шасси миниатюрную видеокамеру. Вроде-бы, должна была появиться куча возможностей, а появилась куча проблем. Первая и самая важная - а как с толком обработать полученую картинку?
Outcaster
 
Сообщения: 267
Зарегистрирован: 13 ноя 2004, 01:10
Откуда: Ривне, Украина

Сообщение =DeaD= » 04 дек 2004, 19:24

В данный момент занимаюсь собственно именно этой проблемой.

Осваиваю возможности библиотеки OpenCV от Intel'а.
(в ней есть вроде как определение контуров предметов, стабильных точек, куча разных готовых фильтров, но еще все не смотрел).

Только на этой неделе смог все это запустить с купленной вебкамерой под борланд С++ Билдером.

Моя платформа - ВебКамера+Phidgets (в качестве интерфейсных плат)+Ноут (в будущем VIA или другой ноут :) - уже кажется проще ноут купить - если что продать и купить новый, чем потом обновляться на следующую версию VIA EDEN).

Ближайшая цель - получить с пары камер информацию о расстоянии до предметов.

Текущая камера тормозная (Genius VideoCAM NB 300) - как отлажу все, надо будет с более быстрой матрицей искать парочку камер.

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

Сообщение Kanoka » 04 дек 2004, 22:45

Хорошую тему начали, следить буду с удовольствием.
Kanoka
Модератор
 
Сообщения: 1274
Зарегистрирован: 11 ноя 2004, 03:18
Откуда: Москва

Сообщение Outcaster » 05 дек 2004, 18:19

Для начала, решил разобраться, что с полученой картинкой делать? Теститил алгоритмы на фрагментах AVI-шек (предположил, что похожие картинки получу с камеры). Получилась такая вещь: если предположить, что камера постоянно двигаеться (совсем не обязательно с постоянной скоростью/направлением), то анализируя текущий кадр относительно предыдущего, дальномер вполне возможно организовать на одной камере. Кроме того, получаеться, что если картинка попадающяя в объектив камеры постоянна (камера стоит на месте, и ничего в видимой области не движеться), то выделить из кадра какие-нибуть объекты нереально - возможно выделение контуров объектов но не как не их идентификация (либо вручную добавлять частные случаи).
Зато если анализировать по разнице между кадрами, то контуры, скорость и вектор отностительного перемещения выделить довольно легко (причём точность оценки растёт со сближением обьекта и камеры).
Outcaster
 
Сообщения: 267
Зарегистрирован: 13 ноя 2004, 01:10
Откуда: Ривне, Украина

Сообщение =DeaD= » 05 дек 2004, 22:20

Outcaster писал(а):Теститил алгоритмы на фрагментах AVI-шек ...скиппед...

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


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

Сообщение =DeaD= » 05 дек 2004, 23:52

Кстати, из моих последних достижений:

Изображение

Квадратики - фрагменты, расстояние до которых смогли определить точно, чем ярче, тем ближе к нам.

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

Сообщение =DeaD= » 06 дек 2004, 23:59

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

Количество распознанных расстояний увеличилось со 128 фрагментов до 227, ни одной ошибки не возникло. В целом если посчитать "более менее осмысленные фрагменты" на тех изображениях, то их будет всего 398 ед (из всего рассмотренных 630 фрагментов). (скорее всего их существенно меньше, ибо считается очень много "фрагментов пола", ну да ладно, черт с ними).

Изображение

Итого получаем следующую статистику:

Осмысленных фрагментов - 63%;

Распознано из осмысленных (алгоритм старый) - 32%;
Распознано из осмысленных (алгоритм новый) - 57%;

Всего распознано на изображении фрагментов (алгоритм старый): 20%;
Всего распознано на изображении фрагментов (алгоритм новый): 36%;

Попробовал алгоритм с текущими настройками на старом идеальном рисунке, как и ожидается - работает идеально :)

Еще попробовал на стереоизображении какой-то детали, тоже все отлично сработало.

(все новые сэмплы на страничке Проект CVision)

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

Сообщение setar » 07 дек 2004, 13:00

Это уже что то :) , мои поздравления.

Я по началу тему зрения как то не очень внимательно изучал, теперь буду следить за вашими разработками.

У меня есть вопрос, возможно он покажется дилетанскими, но всё же:
с помошью этого алгоритма мы получим карту расстояний от камеры до объектов.
В каком виде планируете хранить результаты - составлять 3D карту векторов, пытаться апроксимировать форму поверхности, или ... ?
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Сообщение =DeaD= » 07 дек 2004, 14:58

setar писал(а):с помошью этого алгоритма мы получим карту расстояний от камеры до объектов.
В каком виде планируете хранить результаты - составлять 3D карту векторов, пытаться апроксимировать форму поверхности, или ... ?


Да вот уже задумался, как использовать, тем более что определяется ~50% нужного... :)

Но надо где-то хотя-бы стерео-AVI найти, чтобы тестить, или срочно пару камер нормальных искать и калибровку изучать :)...
Последний раз редактировалось =DeaD= 07 дек 2004, 16:23, всего редактировалось 1 раз.
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение setar » 07 дек 2004, 15:09

Может быть попробовать одной пока обойтись?
ну например делать перемещения её вправо-лево на рельсе со съёмкой в крайних положениях ... правда это выглядеть немного смешно будет.

И ещё вопрос чисто теоретический: человеческий глаз способен распознавать расстояние до объекта даже когда он один (не по стерео картине), неужели это всё делает мозг исключительно опираясь на базу знаний о размерах окружающих предметов ???
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Сообщение =DeaD= » 07 дек 2004, 16:01

setar писал(а):И ещё вопрос чисто теоретический: человеческий глаз способен распознавать расстояние до объекта даже когда он один (не по стерео картине), неужели это всё делает мозг исключительно опираясь на базу знаний о размерах окружающих предметов ???

Разумеется еще на тени, но это уже высший пилотаж, а так конечно на размеры предметов и на их относительное (друг-друга) положение :)

Чуть не забыл! Еще на изменение размеров объекта относительно нашего или его перемещения в пространстве. Я на эту тему уже тоже думаю, но это векторные поля, с ними работае семейство так называемых "optical flow"-алгоритмов.

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

Сообщение Outcaster » 07 дек 2004, 16:35

=DeaD= писал(а):Это чисто теорететически, или у вас есть реальные работающие библиотеки?
Есть алгоритмы, в библиотеки не оформлял, так как они...пока практически безтолковые (над двумя кадрами Р4-й минут 5 возиться). По этому, изложу принцип, может у кого более светлая/толковая идея появиться :D :
В общем: есть два кадра, на которых несколько сложных обьектов в разных положениях относительно камеры. Независимо от направления относительного перемещения, проекции поверхностей обьектов (изображения на кадре) деформируються.
Что делаю: деформирую один из кадров, имитируя, как будто то плоская картинка, положение которой отностиельно обьектива изменяют. При определённых деформациях, фрагменты первого и сдеформированого второго практически совпадают. Определяю, что этот фрагмент есть поверхность, которая изменила положение (согласно параметрам для деформации). Таким образом, делю всю картинку фрагменты, и их перемещение. Далее, пересчитываю, что и как переместилось, оттуда расстояние до них, и т.д.
Самая увесистая по времени часть - перебором поделить на фрагменты. На том и застопорился. :(
Outcaster
 
Сообщения: 267
Зарегистрирован: 13 ноя 2004, 01:10
Откуда: Ривне, Украина

Сообщение =DeaD= » 07 дек 2004, 16:49

Это называется "optical-flow fields", ваш подход "принципиально неправильный", потому как при приближении к объекту его структура растягивается и совпадений вообще быть не может (точнее есть, но в целом поверхность будет совпадать лишь локально). Там применяются какие-то хитрые алгоритмы, которые формируют векторные поля, уже из которых получаем данные о структуре окружающего нас мира.
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение Outcaster » 07 дек 2004, 20:27

Там ещё много разных проблем, кроме растяжения,сжатия структуры. Напр. быстродвижущиеся обьекты "зармазаные", тени, освещение/отражение и т.д. Суть не в этом. Я веду к тому, что камеры достаточно одной, но нужно, что-бы что-то двигалось, тогда всё работает. В любом случае, нужен алгоритм, с помощью которого, на двух картинках отыскиваеться один и тот-же обьект (независимо, сколько камер стоит). Собственно, этот алгоритм я не разрабатывал, а попробывал взять "в лоб", чтобы попробывать работоспособность идеи с одной камерой (исключительно ради эксперимента). В лоб не вышло (вышло, но неоправданно громоздко). Вот над этим и стоит коллективно подумать.

По этому, и подкидываю идею парсить авишники, как на самый доступный робочий материал для этой цели. Кстати, прикидываю, что ещё лучше начать с простеньких моделей, отрендереных напр. на 3DMAX, потом перейти на мульты типа Ice Age, Shrek, и уж потом браться за фильмы.
Outcaster
 
Сообщения: 267
Зарегистрирован: 13 ноя 2004, 01:10
Откуда: Ривне, Украина

Сообщение =DeaD= » 07 дек 2004, 22:38

Нафиг-нафиг на мульты - там кто-нибудь полуанимацию вставит и нашим программам крышу снесет... :)

Про блики\отражения\полупрозрачные предметы - это вообще тихий ужас для распознавания образов и определения расстояний - просто вечный источник проблем... :)

Ладно, как найду как использовать новые данные о расстояниях, либо как обрабатывать эти optical-flow поля - напишу...
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

След.

Вернуться в Алгоритмы

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

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