Расчёт матрицы (вектора) вращения камеры для видео(?)
От: _sergei_  
Дата: 14.02.09 13:14
Оценка:
С последовательности видео кадров удалось получить векторы перемещения объектов (или вектор движения камеры). Вот только не могу найти алгоритм расчёта матрицы (вектора) вращения используя имеющуюся информацию. Всё обыскал и ничего так и не нашёл. В каком направлении хотябы двигаться?
Re: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: subdmitry Россия  
Дата: 14.02.09 14:17
Оценка:
Здравствуйте, _sergei_, Вы писали:

__>С последовательности видео кадров удалось получить векторы перемещения объектов (или вектор движения камеры). Вот только не могу найти алгоритм расчёта матрицы (вектора) вращения используя имеющуюся информацию. Всё обыскал и ничего так и не нашёл. В каком направлении хотябы двигаться?


Эта задача стандартно решается в кодеках видео. Можно посмотреть там (многие кодеки доступны в исходниках). Можно для начала заглянуть на сайт www.compression.ru.
And if you listen very hard the alg will come to you at last.
Re[2]: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: _sergei_  
Дата: 14.02.09 14:28
Оценка:
Здравствуйте, subdmitry, Вы писали:

S>Здравствуйте, _sergei_, Вы писали:


__>>С последовательности видео кадров удалось получить векторы перемещения объектов (или вектор движения камеры). Вот только не могу найти алгоритм расчёта матрицы (вектора) вращения используя имеющуюся информацию. Всё обыскал и ничего так и не нашёл. В каком направлении хотябы двигаться?


S>Эта задача стандартно решается в кодеках видео. Можно посмотреть там (многие кодеки доступны в исходниках). Можно для начала заглянуть на сайт www.compression.ru.


Интересно. Зачем при сжатии решать эту задачу. Мне нужно оценить вращение камеры (или на сколько повернулся текущий кадр относительно прошлого)
Re[3]: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: subdmitry Россия  
Дата: 14.02.09 15:04
Оценка:
Здравствуйте, _sergei_, Вы писали:

__>Интересно. Зачем при сжатии решать эту задачу.


Дело в том, что основной прием при сжатии видео — это учет того, что соседние кадры не очень сильно отличаются друг от друга. В первом приближении отличие между ними и задается сдвигом+поворотом изображения. Если я не ошибаюсь, там как-то находит и одно, и второе.
And if you listen very hard the alg will come to you at last.
Re: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: minorlogic Украина  
Дата: 15.02.09 09:06
Оценка:
Здравствуйте, _sergei_, Вы писали:

__>С последовательности видео кадров удалось получить векторы перемещения объектов (или вектор движения камеры). Вот только не могу найти алгоритм расчёта матрицы (вектора) вращения используя имеющуюся информацию. Всё обыскал и ничего так и не нашёл. В каком направлении хотябы двигаться?


"R. I. Hartley and A. Zisserman. Multiple View Geometry in Computer Vision. Cambridge University Press, second edition, 2004."

Или в инете ищите по ключевым словам "Bundle Adjustment"
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[3]: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: f.kirill Россия  
Дата: 15.02.09 17:41
Оценка:
__>Мне нужно оценить вращение камеры (или на сколько повернулся текущий кадр относительно прошлого)

Делается на основе того, что амплитудный спектр Фурье поворачивается на тот же угол, что и изображение, и при этом не зависит от сдвига. Конечно, если сдвиг достаточно большой, то могут быть заметные изменения спектра за счёт краевых эффектов. Поэтому изображения надо предварительно окном обработать.
Re: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: _sergei_  
Дата: 18.02.09 15:12
Оценка:
Здравствуйте, _sergei_, Вы писали:

__>С последовательности видео кадров удалось получить векторы перемещения объектов (или вектор движения камеры). Вот только не могу найти алгоритм расчёта матрицы (вектора) вращения используя имеющуюся информацию. Всё обыскал и ничего так и не нашёл. В каком направлении хотябы двигаться?


Третий день бьюсь и ничего... уже надоело . Как вообще можно определить угол поворота между двумя картинками?
Re[2]: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: f.kirill Россия  
Дата: 18.02.09 16:00
Оценка:
__>Как вообще можно определить угол поворота между двумя картинками?
Я же написал уже как. Или вы не читаете ответы на свой же вопрос?
Re[2]: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: denisko http://sdeniskos.blogspot.com/
Дата: 18.02.09 19:02
Оценка:
Здравствуйте, _sergei_, Вы писали:

__>Здравствуйте, _sergei_, Вы писали:


__>>С последовательности видео кадров удалось получить векторы перемещения объектов (или вектор движения камеры). Вот только не могу найти алгоритм расчёта матрицы (вектора) вращения используя имеющуюся информацию. Всё обыскал и ничего так и не нашёл. В каком направлении хотябы двигаться?


__>Третий день бьюсь и ничего... уже надоело . Как вообще можно определить угол поворота между двумя картинками?

Ок, смотрите. допустим, у вас есть два изображения, снятых одной и тойже камерой. Зададим систему координат {x,y,z} такую, что x,y лежит в плоскости изображения камеры. Тогд преобразование координат {x,y,z} в координаты камеры {u,v} будет иметь вид u = x * f / z, v = y * f/z. f -- фокусное расстояние камеры. Потом камера повернулась. Матрицу поворота обзовем T. новые координаты камеры для той же точки {u',v'} будут иметь вид
u' = (T11 * x + T12 * y + T13 * z)/(T31 * x + T32 * y + T33 * z) , v' = (T21 * x + T22 * y + T23 * z)/(T31 * x + T32 * y + T33 * z) или для z!=0
u' = (T11 * u/f + T12 * v/f + T13) / (T31 * u/f + T32 * v/f + T33), v' = (T21 * u/f + T22 * v/f + T13) / (T31 * u/f + T32 * v/f + T33). Т.е. получили 2 ЛИНЕЙНЫХ уравнения для 9 НЕнезависимых (матрица поворота унитарная) коэффициенов. Далее берете все точки и по МНК (как и сказал minorlogic) получаете коэффициенты Tij.
З.ы. Сразу предупреждаю, поначалу получится хреново, поскольку надо исключить все линзовые искажения и.т.п.
<Подпись удалена модератором>
Re[3]: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: _sergei_  
Дата: 18.02.09 19:33
Оценка:
Здравствуйте, denisko, Вы писали:

D>Здравствуйте, _sergei_, Вы писали:


__>>Здравствуйте, _sergei_, Вы писали:


__>>>С последовательности видео кадров удалось получить векторы перемещения объектов (или вектор движения камеры). Вот только не могу найти алгоритм расчёта матрицы (вектора) вращения используя имеющуюся информацию. Всё обыскал и ничего так и не нашёл. В каком направлении хотябы двигаться?


__>>Третий день бьюсь и ничего... уже надоело . Как вообще можно определить угол поворота между двумя картинками?

D>Ок, смотрите. допустим, у вас есть два изображения, снятых одной и тойже камерой. Зададим систему координат {x,y,z} такую, что x,y лежит в плоскости изображения камеры. Тогда преобразование координат {x,y,z} в координаты камеры {u,v} будет иметь вид u = x * f / z, v = y * f/z. f -- фокусное расстояние камеры. Потом камера повернулась. Матрицу поворота обзовем T. новые координаты камеры для той же точки {u',v'} будут иметь вид
D>u' = (T11 * x + T12 * y + T13 * z)/(T31 * x + T32 * y + T33 * z) , v' = (T21 * x + T22 * y + T23 * z)/(T31 * x + T32 * y + T33 * z) или для z!=0
D>u' = (T11 * u/f + T12 * v/f + T13) / (T31 * u/f + T32 * v/f + T33), v' = (T21 * u/f + T22 * v/f + T13) / (T31 * u/f + T32 * v/f + T33). Т.е. получили 2 ЛИНЕЙНЫХ уравнения для 9 НЕнезависимых (матрица поворота унитарная) коэффициенов. Далее берете все точки и по МНК (как и сказал minorlogic) получаете коэффициенты Tij.
D>З.ы. Сразу предупреждаю, поначалу получится хреново, поскольку надо исключить все линзовые искажения и.т.п.

Насчёт линзовых искажений (distortion) да конечно их я исключаю. Вся проблема состоит в том, что Corresponding points (или точки сооствествия по русски говоря) для каждой последующей пары кадров различны, среди них конечно можно откинуть ошибки (или outliers) но готовые свободные библиотеки сообщают о том что (короче подставляя для моего случая) фундаментальная матрица может расчитываться неверно. Спасибо за ответ, завтра (19 февраля) обязательно изучу и попробую. Дело в том что я могу получить достаточно точную матрицу вращения для случая калибровки камеры (указывая 3D координаты реальных объектов и их 2d координаты на изображении), но имея в обращении лишь видео файл (или последовательность кадров) и имея 200-400 (по желанию) точек на первом и найденных их же на втором (вычитая не верные по каким-либо признакам (я учитываю длину вектора перемещения объекта/участка)) задача усложняется. Визуализируя перемещения каких-то отслеживаемых участков на изображении вращение очевидно, но как я не бился применение их в качестве расчёта матрицы вращения не удаётся.
На счёт "Bundle Adjustment", если честно я конечно обратил внимание на сообщение minorlogic, но так и не смог найти решения.
На счёт матрицы поворота, мне надо получить её зная положение отслеживаемых участков на двух последовательных кадрах. То есть на первом изображении я выбираю 2-3 сотни участков (удобных для отслеживания, т.е. границы, углы) и на втором я их нахожу (знаю их новое место положение по x,y и довольно неплохо).
Спасибо ещё раз за ответ, я обязательно попробую найти решение. На самом деле задача интересная, но во тоже время достаточно сложная, достаточно для того чтобы находить такие статьи и книги (в интернете) где этому уделяется очень большая часть внимания.
Re[4]: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: denisko http://sdeniskos.blogspot.com/
Дата: 19.02.09 07:24
Оценка:
Здравствуйте, _sergei_, Вы писали:

__>Здравствуйте, denisko, Вы писали:


D>>Здравствуйте, _sergei_, Вы писали:


__>>>Здравствуйте, _sergei_, Вы писали:


Надо уточнять задачу. Есть камера. Перед ней есть фон. Участки фона могут двигаться сами по себе или только с камерой?. Какое разрешение у камеры.
Например, если разрешение позволяет, то можно найти, например, 4 железно совпадающие точки и определить проективку полностью. А потом из проективки вытянуть сдвиг + вращние.
Если брать самый простой случай, то Фундаментальная матрица в вашем случае (т.к. камера одна), это просто сдвиг(if any) + вращение, т.е. 6 параметров.(т.е. 6 линейных уравнение + связь из-за спец вида матриц сдвига + поворота). Самое простое сделать так для каждой пары совпдающих элементов ищете параметры. Потом, как честный человек ищете среднее этого 6мернго вектора + дисперсию, все что наиболее далеко от среднего отбрасываете, снова ищите среднее и дисперсию, пока новое значение среднего не станет "равным" старому.
Херня, конечно, но это позволит сделать макет задачи и посмотреть где у вас слабые места. Скорее всего их несколько: линзовые искажения, ошибки в совпадениях, фундаментальные неточности (т.е. недостаток разрешения). Вот с ними и будете бороться.
<Подпись удалена модератором>
Re[5]: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: _sergei_  
Дата: 19.02.09 09:04
Оценка:
Здравствуйте, denisko, Вы писали:

D>Здравствуйте, _sergei_, Вы писали:


__>>Здравствуйте, denisko, Вы писали:


D>>>Здравствуйте, _sergei_, Вы писали:


__>>>>Здравствуйте, _sergei_, Вы писали:


D>Надо уточнять задачу. Есть камера. Перед ней есть фон. Участки фона могут двигаться сами по себе или только с камерой?. Какое разрешение у камеры.

D>Например, если разрешение позволяет, то можно найти, например, 4 железно совпадающие точки и определить проективку полностью. А потом из проективки вытянуть сдвиг + вращние.
D>Если брать самый простой случай, то Фундаментальная матрица в вашем случае (т.к. камера одна), это просто сдвиг(if any) + вращение, т.е. 6 параметров.(т.е. 6 линейных уравнение + связь из-за спец вида матриц сдвига + поворота). Самое простое сделать так для каждой пары совпдающих элементов ищете параметры. Потом, как честный человек ищете среднее этого 6мернго вектора + дисперсию, все что наиболее далеко от среднего отбрасываете, снова ищите среднее и дисперсию, пока новое значение среднего не станет "равным" старому.
D>Херня, конечно, но это позволит сделать макет задачи и посмотреть где у вас слабые места. Скорее всего их несколько: линзовые искажения, ошибки в совпадениях, фундаментальные неточности (т.е. недостаток разрешения). Вот с ними и будете бороться.

Задача такая:
Есть видео запись, не важно от куда, будь то художественный фильм, запись с любительской камеры, откуда угодно. Вообщем есть видео запись не известно с какой камеры, не известно что за сцена, ничего не известно. Известен лишь размер кадра и всё. Далее получив ч/б (gray scale) изображение кадров отслеживаются каие-то удобные для этого области на двух соседних кадрах, т.е. области с первого кадра находятся на втором. Всё, и теперь зная координаты какой-либо области на первом и втором кадре нужно получить вектор вращения. Нашёл наконец книгу "R. I. Hartley and A. Zisserman. Multiple View Geometry in Computer Vision. Cambridge University Press, second edition, 2004", очень интересная книга, буду искать ответ в ней.
Re: Расчёт матрицы (вектора) вращения камеры для видео(?)
От: _sergei_  
Дата: 19.02.09 15:10
Оценка:
Здравствуйте, _sergei_, Вы писали:

__>С последовательности видео кадров удалось получить векторы перемещения объектов (или вектор движения камеры). Вот только не могу найти алгоритм расчёта матрицы (вектора) вращения используя имеющуюся информацию. Всё обыскал и ничего так и не нашёл. В каком направлении хотябы двигаться?


Наконец, спасибо всем, я нашёл решение!

Просто выстроил по полученным координатам x вектора по длине от ymin до ymax (разница y между соседникми картинками имеется ввиду) и наглядно получил линию (построенную через концы векторов спомощью МНК) и угол наклона этой линии относительно "горизонта" (если нарисовать его по середине изображения) и даёт искомый угол и достаточно точно. Спомощью этого даже удалось получить центр вращения по x (но не по y, потомучто вектора прорисовывались с горизонта по y, а не на своих координатах, которые определились во время поиска).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.