roboforum.ru

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

Универсальное зрение для навигации - 3D-реконструкция

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение Виталий » 12 сен 2008, 21:08

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

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение Vorral » 12 сен 2008, 22:27

Завтра раскажу подробно, сегодня мальчишник у брата, нужно выпить :wink:
Vorral
 
Сообщения: 873
Зарегистрирован: 11 сен 2008, 17:18
Откуда: Москва
прог. языки: Delphi
ФИО: Владислав

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение Vorral » 13 сен 2008, 19:05

У меня не очень сложный алгоритм. Выглядит он следующим образом: картинка с левой камеры разбивается на сетки 12на12 пикселей(кстати раньше эта сетка ездила вперёд находя например резкое изменение яркости, т.е. границу) , дальше(слева на право , сверху вниз) начинаем поочереди работать с каждой такой сеткой, которая в свою очередь разбита на 16 элементов 3на3 пикселя. Работа заключается в сравнении(сначало из одной яркости вычиталась вторая и если по модулю не превысили некоего порога, то считаем что похожа, но лучший результат даёт вычитание не яркости, а самого числа RGB в нашей родной десятичной системе счисления) c шагом в один пиксель(справо на лево на картинке полученой с правой камеры), каждого из 16 элементов с такими же 16 на соседней картинке, все варианты сравнений от координаты нахождения сетки 12x12 до 0 записываются в массив. Дальше идёт работа с этим массивом: нахождение максимальных значений и отбирание по всему массиву значений отстающих от максимального на некторое значение и сортируем в порядке убывания. Дальше начинаются логические(типа элементы находящиеся правее не могут быть ближе, количество совпадений крайней правого элемента высоко, сами совпадения не сильно отличаются и идут подряд - монотонная область, значения совпадений большинства элементов совпадают друг с другом и с общей суммой, при этом следующее общее значение находится всего в одном пикселе - значит нужное нам значение и т.д.) операции выбора из всех вариантов лучшего значения и если оно одназначно хорошее, то в следующий раз не идём до 0, а сравниваем пиксели до последнего наиболее успешно найденного значения, т.к. искать за этим значением бессмысленно.
Как говорится теперь даже я понял как он работает :) , а то я до этого с чем только не экспериментировал.
Vorral
 
Сообщения: 873
Зарегистрирован: 11 сен 2008, 17:18
Откуда: Москва
прог. языки: Delphi
ФИО: Владислав

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение =DeaD= » 13 сен 2008, 19:45

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

Что значит "результаты сравнения записываются в массив"? СКО в массив пишете чтоли? Что с чем конкретно сравниваете? Можете формулами говорить? А не просто обтекаемыми общими фразами, а то ничего не ясно :(

Есть у вас две картинки img1[W][H][3] и img2[W][H][3] - 3 канальные, шириной W (координаты 0..W-1) и высотой H (координаты 0..H-1).
Чего конкретно считаете, что есть результат сравнения и т.п.?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение Vorral » 13 сен 2008, 23:29

img1[W][H][3] и img2[W][H][3]
Подчеркну, что я сравниваю не по каналам RGB и не по яркости, а сразу Tcolor - числом integer. т.е. if abs(Tcolor1 -Tcolor2)<6 then inc(счётчик)

img2[12][0]-первая сетка 12х12, начинает сравниваться с img1[12][0] потом img1[11][0] img1[10][0] ... img1[0][0] - Это и будет массивом( [0..12][0..16] -значения совпадений пикселейу сетки 3х3), т.е. в точке img1[10][0] у меня 16 элементов по 3х3 принимают какое то значение от 0..9(по количеству пикселей) и я смотрю в какой точке оно выше, если например в img1[2][0] - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9 - а в отсальных 0,0,0,..0, то "глубина" квадрата 12х12 найдена на 100% и равна img1[12]-img1[2] -> 10 и. т.д. Только делаю я это для каждого элемента в отдельности, т.к. вся сетка ,бывает равна редко.

Надеюсь теперь "даже" вам понятно :D
Последний раз редактировалось Vorral 14 сен 2008, 02:22, всего редактировалось 1 раз.
Vorral
 
Сообщения: 873
Зарегистрирован: 11 сен 2008, 17:18
Откуда: Москва
прог. языки: Delphi
ФИО: Владислав

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение =DeaD= » 14 сен 2008, 00:43

Мда... у вас талант объяснять настолько непонятно...
Vorral писал(а):Подчеркну, что я сравниваю не по каналам RGB и не по яркости, а сразу Tcolor - числом integer. т.е. if abs(Tcolor1 -Tcolor2)<6 then inc(счётчик)

И какой смысл имеет такое сравнение? Чему равно abs(TColor(r1,g1,b1)-TColor(r2,g2,b2))?

Vorral писал(а):img2[12][0]-первая сетка 12х12

img2[12][0] - Это не сетка 12х12, это ссылка на пиксель с координатами (12,0) в котором массив из 3 чисел - компоненты R,G,B.

Vorral писал(а):начинает сравниваться с img1[12][0] потом img1[11][0] img1[10][0] ... img1[0][0] - Это и будет массивом

Что "это" будет у вас массивом?

Vorral писал(а):т.е. в точке img1[10][0] у меня 16 элементов по 3х3 принимают какое то значение от 0..9(по количеству пикселей) и я смотрю в какой точке оно выше, если например в img1[2][0] - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9 - а в отсальных 0,0,0,..0, то "глубина" квадрата 12х12 найдена на 100% и равна img1[12]-img1[2] -> 10 и. т.д. Только делаю я это для каждого элемента в отдельности, т.к. вся сетка ,бывает равна редко.

Ваще не понял чего тут написано, какие такие 9,9,9,9,...,9 и 0,0,0,0,...,0 ?

Vorral писал(а):Надеюсь теперь "даже" вам понятно :D

Не угадали...

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

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

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение Vorral » 14 сен 2008, 02:16

Можно и так сказать, только блок этот 3х3, и сравнивается сразу 16 таких блоков, а потом благодаря возможности сложить результаты сравнения всех блоков или какой то определённой последовательности мы делаем вывод о том, какая "глубина" у каждого блока 3х3.

>И какой смысл имеет такое сравнение? Чему равно abs(TColor(r1,g1,b1)-TColor(r2,g2,b2))?img2[12][0] - Это не сетка
abs()- вычитание по модулю. Смотри ниже.
>12х12, это ссылка на пиксель с координатами (12,0) в котором массив из 3 чисел - компоненты R,G,B.
Как раз нет, там одно число, которое измеряется тремя байтами цветовой составляющей К,З,С-> R,G,B- [0..255], которые в свою очередь извлекается в Delphi с помощь вызова: get(r,g,b)value
rgb(r,g,b:byte):tcolor //получаешь цвет по 3 составляющим
getrvalue(color:tcolor)
getgvalue(color:tcolor)//получаешь значение интенсивности цвета.
getbvalue(color:tcolor)
Vorral
 
Сообщения: 873
Зарегистрирован: 11 сен 2008, 17:18
Откуда: Москва
прог. языки: Delphi
ФИО: Владислав

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение =DeaD= » 14 сен 2008, 10:07

Vorral писал(а):Можно и так сказать, только блок этот 3х3, и сравнивается сразу 16 таких блоков, а потом благодаря возможности сложить результаты сравнения всех блоков или какой то определённой последовательности мы делаем вывод о том, какая "глубина" у каждого блока 3х3.

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

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение Vorral » 14 сен 2008, 11:33

Сравнить, наверное не лучшее определение, скорее получается проверка на равенство,т.е имеем два пикселя X,Y-десятичное число размером три байта, равных цвету в этих пикселях. если |X-Y|<6-истина то равны, иначе не равны.
Вот и считаем сколько пикселей "равно" в блоках 3х3, максимальная схожесть - 9, минимальная -0. Правда, я хочу внести ещё кое что в "сравнение" этих блоков, чтобы улучшить результат.
Vorral
 
Сообщения: 873
Зарегистрирован: 11 сен 2008, 17:18
Откуда: Москва
прог. языки: Delphi
ФИО: Владислав

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение =DeaD= » 14 сен 2008, 11:38

Скажите мне какой смысл имеет непосредственное вычитание\сравнение 2 трёхбайтовых чисел в которых R,G и B компоненты находятся в разных байтах?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение Vorral » 14 сен 2008, 15:33

Я тоже так думал раньше :roll: Но случайно ошибившись в коде, я заместо яркости точки [0..255] напихал в матрицу 320x240 самого значения цвета(дабы она это позволяла так была описана как array of integer). И сравнение стало на порядок лучше, не представляете как я был удивлён :crazy:
Vorral
 
Сообщения: 873
Зарегистрирован: 11 сен 2008, 17:18
Откуда: Москва
прог. языки: Delphi
ФИО: Владислав

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение =DeaD= » 14 сен 2008, 15:46

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

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение Vorral » 14 сен 2008, 16:12

Понимаю, и результат есть, в чём сомневаться даже не приходится. Вот только что вы хотите понять или к чему все эти вопросы? Я сам себе поставил очень чёткую задачу по тому чем должен обладать этот алгоритм: Максимальным быстройдействием(чтобы тратила как можно меньше процессорного времени, роботу ещё будет чем заняться) и при этом максимальной детализацией и кол-вом востановленной 3D сцены. Поэтому и пришла в голову мысль попробовать сравнивать два числа сразу, но как то был занят другими важными частями и не заметил как ошибся экспериментируя с поиском границ и их сравнении, и случилось то, что я описал выше. Всё, пошёл в Crysis погоняю по сети.
Vorral
 
Сообщения: 873
Зарегистрирован: 11 сен 2008, 17:18
Откуда: Москва
прог. языки: Delphi
ФИО: Владислав

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение =DeaD= » 14 сен 2008, 16:27

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

Re: Универсальное зрение для навигации - 3D-реконструкция

Сообщение Vorral » 14 сен 2008, 20:48

Я уже всё сказал. Тем более какой прок вам забивать голову подобными вещами?
Vorral
 
Сообщения: 873
Зарегистрирован: 11 сен 2008, 17:18
Откуда: Москва
прог. языки: Delphi
ФИО: Владислав

Пред.След.

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

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

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