Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Деформация изображения, Расстояния и углы поворота известны 
:(
    Опции темы
baslie
Дата 14.5.2013, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.12.2011

Репутация: нет
Всего: нет



Нужно деформировать изображение, снимаемое камерой. Масштаб и углы поворота alpha, beta известны (расстояния a1-a2 и b1-b2 до захватываемой камерой плоскости). Не понятно, как выстроить матрицу преобразования.

user posted image
PM MAIL   Вверх
Pavia
Дата 14.5.2013, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



baslie, 
Из чертежа не понятно что и куда надо привести. Перерисуйте нормально. Мировую матрицу задаёшь как произведения матриц вращения alpha и beta. А матрицу вида умножаешь на матрицу масштаба.


PM MAIL   Вверх
baslie
Дата 14.5.2013, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.12.2011

Репутация: нет
Всего: нет



Pavia, камера имеет 6 степеней свободы: отн-но снимаемой плоскости она движется вперёд/назад, вверх/вниз, влево/вправо, при этом может поворачиваться вокруг каждой из трёх взаимно перпендикулярных осей (рыскание, тангаж, крен). Здесь нарисованы рысканье и тангаж. Грубо говоря, у меня есть все необходимые данные (в том числе и крен), чтобы правильно спроецировать изображение на плоскость.

Если поможете с формулами - простыми, кодю на Матлабе без библиотек - буду очень признателен!

Это сообщение отредактировал(а) baslie - 14.5.2013, 09:01
PM MAIL   Вверх
baslie
Дата 14.5.2013, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.12.2011

Репутация: нет
Всего: нет



Т.е. на выходе я должен получить изображение m1m2m3m4:

user posted image
PM MAIL   Вверх
baldina
Дата 14.5.2013, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



PM MAIL   Вверх
Pavia
Дата 14.5.2013, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Здесь наглядные.
http://www.songho.ca/opengl/gl_transform.html
Формулы вращения сами найдёте.

Единственно что хочу добавить есть левые системы и правые. В DirectX вектор умножается на матрицу  V*M , в матрица умножается на вектор OpenGL M*V. поэтому вид матриц может отличаться.

PM MAIL   Вверх
_Y_
Дата 14.5.2013, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



я решал такую задачу чистой тригонометрией в трехмерном пространстве


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
baslie
Дата 15.5.2013, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.12.2011

Репутация: нет
Всего: нет



Цитата(_Y_ @ 14.5.2013,  20:09)
я решал такую задачу чистой тригонометрией в трехмерном пространстве

Подскажите как?? Снова уперся в проективную матрицу с 9-ью параметрами - к моему стыду, не смог осилить эту математику.
PM MAIL   Вверх
_Y_
Дата 16.5.2013, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



baslie, попробую поискат' в своих бакапах. Может найду.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
baslie
Дата 18.5.2013, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.12.2011

Репутация: нет
Всего: нет



Еще раз сформулирую вопрос.

Как интерполировать картинку с камеры (6 степеней свободы) на захватываемую камерой стену, если известны три угла поворота и расстояние до стены?

user posted image

Это сообщение отредактировал(а) baslie - 18.5.2013, 10:46
PM MAIL   Вверх
Pavia
Дата 18.5.2013, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



baslie, 
Если с матрицей разобрались. То вот описание текстурирования есть здесь http://algolist.manual.ru/graphics/3dfaq/articles/43.php
PM MAIL   Вверх
baslie
Дата 18.5.2013, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.12.2011

Репутация: нет
Всего: нет



Pavia, дико извиняюсь, не могу даже сути уловить. Можете на словах объяснить как это все применить к текущей задаче? 
PM MAIL   Вверх
Pavia
Дата 18.5.2013, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



baslie, 
У вас каша в голове. Это вызвано тем, что вы недостаточно хорошо владеете терминологией. Отсюда у вас затруднения с постановкой задачи. И как следствие очень большие проблемы с решением. 

Существует два подхода к решению задач. Это сверху вниз и снизу в верх. Первый вам не подходит. Так как в противном случае вы бы уже решили задачу. 
Поэтому вам надо начать с низкого уровня выучить нужные термины и определения.

Задача 1.
Имеем стену. На стене находиться экран.  Есть камера которая направленна на стену. Картинка с камеры отображается на мониторе. Мы хотим создать виртуальное изображение на мониторе, как если бы вместо экрана на стене весела картина. 
Это то как происходит при записи прогноза погоды. 

Сейчас это называется дополненной реальность.  В реальный объект мы добавляем виртуальный - картину.  Далее вместо картины мы будем говорить виртуальное изображение. Это изображение находиться на стене. 

Изображение на мониторе будем называет с проецированным изображением.

Задача 2. Перепроецирование.  Можно сформулировать по разному. 
а)  Восстановление изображения.  Пусть у нас есть проектор и он должен корректно отобразить на экране картинку полученную с камеры.
б)  Создать изображение такое как если бы камера имела мировые координаты.

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

1. Нам нужно создать виртуальный мир.
2. Поместить в него виртуальное изображение.
3. Перевести координаты из виртуального мира в координаты на мониторе.

1.1. Для создания мира нам нужно ввести систему координат.
1.2. Нам нужно задать начало координат мира откуда мы будем отсчитывать координаты всех объектов в этом мире. 
1.3. Нам нужно ввести метрику для измерения размеров и задания координат.
2.1. Изображение состоит из точек надо определить число точек по ширине и высоте.
2.2. Нам нужно определить координаты каждой точке в нашем мире.
3.1. Надо задать координату связанную с камерой.
3.2. Надо найти проекцию предметов находящихся в нашем мире на матрицу камеры.

3.1.1. Поместим систему координат связанную с камерой в фокус камеры.
3.2.1. Надо перевести из мировых координат в координаты камеры.
3.2.2. Надо выполнить проекционные преобразования.


Думаю с этим закончили. Будем разбираться с низким уровнем.
1.  Для решения геометрической задачи нужно ввести систему координат.  Систему координат можно ввести по разному.
Я понимаю что хочется привязать её к камере но сделать это не просто, так как камера подвижная и ещё вращается. 
Вначале я хотел за начало координат мира взять черепаху на которой стоят 3 слона. Но потом подумал если есть стены то должен быть и пол привяжем систему координат к полу и стене. 
В играх есть такое понятие как мир. И есть понятие мировой матрицы. Она определяет положение объекта в мире.  В терминах DirectX World Matrix. В терминах OpenGL Model Matrix. Я бы её назвал  Model2World Matrix

2.  Создадим и вторую систему координат связанную с камерой. Воспользуемся математикой для перевода из одной системы координат в другую.  Как известно такое преобразование можно записать матрицой. 
Матрица с камерой называется видовой матрицой. В терминах DirectX  view matrix , в терминах OpenGL
World2View Matrix

Всё в этом мире относительно. Как сказал клон профессора. Двигатель не двигает корабль. Корабль стоит на месте, а двигатель двигает вселенную. Трудно представить? Вот также и с камерой когда она движется. 

3. Проектирование. Проектирование бывает разных видов делится оно на два больших класса. Параллельное и перспективное.
При перспективном лучи сходятся в точку.
Если мы работаем с физической камерой, то она имеет линзу которая собирает лучи в фокусе.  Т.е. у нас будет перспективное преобразование.  С виртуальной камерой тоже также. 

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

5. Для рендринга 3D мира существует несколько подходов. 
а) Прямая трассировка лучей.
Для каждой точки выполняем следующее преобразование. Перевод в мировые координаты затем в координаты относительно камеры выполняем проецирование. 

б) Обратная трассировка лучей.
Берем координаты точки на мониторе.  Делаем обратные операцию к проецированию, переводим из координат камеры в мировые координаты. Сравниваем координаты луча с координатами точки на изображения.
с) scanline - алгоритм.  Это целый класс алгоритмов. В отличии от а) и  б) они работают быстрее правда зачастую имеют проблемы с качеством картинки.  Если рассматривать как профессионалы, то да качество ниже, а вот на не профессиональный вы и не заметите.

Алгоритм scanline - это алгоритм построения многоугольника по координатам монитора. Любой геометрический объект можно представить в виде многоугольника.  Наш экран или виртуальную картину можем представить в виде 2-х треугольников или 1 четырёх угольника выполнить преобразование из мировых координат в координаты монитора.  
Полученные треугольники(или многоугольники) в новых координатах разбиваются на горизонтальные линии(scanline). 
Затем линии выводятся на монитор. При отрисовки каждой линии идёт её заполнение цветом.
Процесс нанесения на треугольник изображения носит название текстурирования. 
Вычисления цвета происходит при помощи преобразования экранных координат в текстурные. В нашем случае текстурные координаты будут соответствовать координатам в системе координат связанной с объектом.  Для ускорения этого процесса делается это при помощи интерполирования. 

Проблема в том что перспективные преобразования не интерполируются линейно. Поэтому применяют более сложное перспективно точное преобразование. 


Стоит отметить что б) с) имеют проблему именуемую антилясингом. Что требует выполнения фильтрации.
Корень проблемы в том что обратное преобразование носит характер один ко многим. Т.е один пиксель на мониторе покрывает несколько пикселей на виртуальной картине.  


6) Крен, Тангаж, Рыскание.  Эти понятия определены для судов и самолётов они вводятся через понятие местого горизонта. Т.е через геодезические понятия. Поэтому их использование не является корректным.  Так как в данной постановки мы никак не связаны с местным горизонтом земли. 

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

7. Поговорим о матрица перехода из одной системы в другую. Такое преобразование можно представить в виде нескольких преобразований. Это перенос, поворот вокруг оси  x, поворот вокруг оси  y, поворот вокруг оси  z. 
Есть и другие представления. К примеру можно рассматривать как поворот вокруг произвольной оси. Или поворот вокруг произвольной точки.

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




Это сообщение отредактировал(а) Pavia - 18.5.2013, 22:22
PM MAIL   Вверх
baslie
Дата 19.5.2013, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.12.2011

Репутация: нет
Всего: нет



Pavia, полностью с вами согласен, каша стоит несусветная smile

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

Задача у меня довольно простая. Я делаю видеопозиционер (одометр), который состоит из двух закрепленных на палке камер, акселерометра и двух дальномеров. Система перемещается вручную относительно стены. В ходе сканирования возможны небольшие "дребезжания", отклонения. Для определения смещения по X и Y используется фазовая корреляция (БПФ). С поворотом по оси Z (угол гамма) я разобрался (преобразование Фурье-Меллина). Поворот относительно оси Y (угол бета) определяется из показаний дальномера, угол альфа - из данных акселерометра. Мне, чтобы оценивать относительные смещения между двумя последовательно снятыми кадрами, нужно интерполировать второе изображение в координаты первого. Т.е. первый кадр, например, снят точно параллельно стене, - стена снята без искажений. Второй чуть смещен и повернут, поэтому его нужно интерполировать в координаты первого.

Вот, примерно такая задача. Т.е. система координат - это начальное положение каждой из камер.
PM MAIL   Вверх
baslie
Дата 19.5.2013, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.12.2011

Репутация: нет
Всего: нет



Pavia, все-таки если систему координат делать относительно предыдущего положения камеры, как можно построить матрицу? Опять же, если я не знаю координаты точек на изображении, а только расстояния до стены и относительные углы поворота. Вы говорили, что только относительно пола со стеной - но это очень неудобно, т.к. кадры нужно каждый раз интерполировать относительно предыдущих.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.