2016-06-07 9 views
2

Рассмотрим систему стереофонической камеры calibration parameters с использованием matlab stereoCameraCalibrator приложение.Понимание внешних стереопараметров (вращения) на Matlab stereoCameraCalibrator

R1 = stereoParams.CameraParameters1.RotationMatrices(:,:,N); 
R2 = stereoParams.CameraParameters2.RotationMatrices(:,:,N); 
R12 = stereoParams.RotationOfCamera2; 

Были:
R1: вращение от мировых координат (для изображения N) к камере 1.
R2: вращение от мировых координат (для изображения N) к камере 2.
R12: вращение от камеры 1 координаты камеры 2. Как описано на a related SO question

Если это правильно, не должно R12*R1 == R2?

Но у меня разные значения, так что что мне здесь не хватает?


Редактировать

Ну, швы все матрицы переставляются. Итак: R12'*R1' == R2'!
Почему они транспонированы?

ответ

1

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

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

x' = A*x 

A бы матрица преобразования и x является колонка вектор координат. Выходной сигнал x' будет другим вектором координат координат. MATLAB фактически использует вектор а строки и поэтому, если вы хотите, чтобы достичь того же эффекта в умножении, вы должны транспонировать матрицу A (т.е. A^{T}) и предварительно умножить на A вместо пост-перемножения:

x' = x*A^{T} 

Здесь x будет представлять собой вектор строки и гарантировать, что взвешенная комбинация строк и столбцов правильно накапливается, вы должны транспонировать A для поддержания тех же вычислений. Однако форма вывода x' будет вместо этого вектором строк.

Это также может быть подтверждено переносом произведения двух матриц. В частности, если x' = A*x, то для того, чтобы преобразовать выход в вектор строки x'^{T}, мы должны транспонировать матрицу-векторное произведение:

x'^{T} = (A*x)^{T} = x^{T}*A^{T} 

Последнее утверждение является естественным свойством транспонирования произведения двух матриц.См. Пункт 3 в статье Transpose Wikipedia для получения дополнительной информации: https://en.wikipedia.org/wiki/Transpose#Properties

Причина, по которой транспонирование выполняется, в конечном счете проистекает из того, как MATLAB справляется с тем, как номера выравниваются в памяти. MATLAB - это основной столбец, что означает, что числа заполняются в матричной колонке. Поэтому, если вы должны заполнить матрицу по одному элементу за раз, это будет сделано по-разному, и поэтому коэффициенты заполняются за столбец, а не за строку, как мы обычно привыкли, в конечном итоге приводя к тому, выше.

Поэтому, когда вы перенести оба значения R12 и R1, это возвращает представление в ряд основных параметров, где эти матрицы были первоначально столбцами для облегчения использования MATLAB. Таким образом, основной параметр строки позволяет использовать координаты, которые являются векторами столбцов, чтобы облегчить преобразование. Эта настройка вектора столбца - это то, к чему мы привыкли. Поэтому, умножая R12 и R1 после их транспонирования, они приводят вас к правильной матрице преобразования R2 в стандартном представлении основных строк.

+0

О, получилось, спасибо за подробное объяснение. Хорошо, я перенесу результаты калибровки, так как я привык к этому представлению, и я думаю, что сбивать с толку порядок умножения. Кроме того, старый (но очень хороший) набор инструментов калибровки Matlab (www.vision.caltech.edu/bouguetj/calib_doc) выводит матрицу правильно. – Pedro77

+0

@ Pedro77 Честно говоря, я тоже переношу матрицы. Я привык к элементам, выровненным в строке. Этот набор инструментов от Jean-Yves Bouguet - очень хороший набор инструментов. Я использовал его в прошлом, и оценка параметров выполняется правильно, так как выполняемый код и оптимизация выводит матрицы в строке. Рад, что смог помочь! – rayryeng

+0

Продолжаем расширять бит litle здесь. Вы сравнили результаты обоих (как и 3D-ошибка)? У меня есть некоторые результаты от стажировки, но я собираюсь проверить себя. Я думаю, что приложение matlab было сделано на основе панели инструментов Bouguetj? Кроме того, есть ли способ установить размер шахматной доски Y, отличный от X, вместо квадрата, как в панели инструментов Bouguetj? Знаете, принтеры никогда не будут достаточно хороши. – Pedro77