OpenCV 4.10.0
开源计算机视觉
|
void cv::sfm::computeOrientation | ( | InputArrayOfArrays | x1, |
InputArrayOfArrays | x2, | ||
OutputArray | R, | ||
OutputArray | t, | ||
double | s | ||
) |
#include <opencv2/sfm/fundamental.hpp>
计算两组 3D 点之间的绝对或外部方向(姿态估计)。
x1 | 输入第一个 3xN 或 2xN 点数组。 |
x2 | 输入第二个 3xN 或 2xN 点数组。 |
R | 输出 3x3 计算得到的旋转矩阵。 |
t | 输出 3x1 计算得到的平移向量。 |
s | 输出计算得到的比例因子。 |
找到最佳变换,使得 xp=projection*(s*R*x+t)(与姿态估计,ePNP 相同)。目前,以下例程仅适用于正交情况。
void cv::sfm::essentialFromFundamental | ( | InputArray | F, |
InputArray | K1, | ||
InputArray | K2, | ||
OutputArray | E | ||
) |
#include <opencv2/sfm/fundamental.hpp>
从基础矩阵和相机矩阵获取基本矩阵。
F | 输入 3x3 基础矩阵。 |
K1 | 输入 3x3 第一个相机矩阵 \(K = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\)。 |
K2 | 输入 3x3 第二个相机矩阵。参数与 K1 相似。 |
E | 输出 3x3 基本矩阵。 |
参考:[117] 9.6 页 257(公式 9.12)
void cv::sfm::essentialFromRt | ( | InputArray | R1, |
InputArray | t1, | ||
InputArray | R2, | ||
InputArray | t2, | ||
OutputArray | E | ||
) |
#include <opencv2/sfm/fundamental.hpp>
从运动(R 和 t)获取基本矩阵。
R1 | 输入 3x3 第一个相机旋转矩阵。 |
t1 | 输入 3x1 第一个相机平移向量。 |
R2 | 输入 3x3 第二个相机旋转矩阵。 |
t2 | 输入 3x1 第二个相机平移向量。 |
E | 输出 3x3 基本矩阵。 |
参考:[117] 9.6 页 257(公式 9.12)
void cv::sfm::fundamentalFromEssential | ( | InputArray | E, |
InputArray | K1, | ||
InputArray | K2, | ||
OutputArray | F | ||
) |
#include <opencv2/sfm/fundamental.hpp>
从基础矩阵和相机矩阵获取基本矩阵。
E | 输入 3x3 基本矩阵。 |
K1 | 输入 3x3 第一个相机矩阵 \(K = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\)。 |
K2 | 输入 3x3 第二个相机矩阵。参数与 K1 相似。 |
F | 输出 3x3 基础矩阵。 |
参考:[117] 9.6 页 257(公式 9.12)或 http://ai.stanford.edu/~birch/projective/node20.html
void cv::sfm::fundamentalFromProjections | ( | InputArray | P1, |
InputArray | P2, | ||
OutputArray | F | ||
) |
#include <opencv2/sfm/fundamental.hpp>
从投影矩阵获取基础矩阵。
P1 | 输入 3x4 第一个投影矩阵。 |
P2 | 输入 3x4 第二个投影矩阵。 |
F | 输出 3x3 基础矩阵。 |
void cv::sfm::motionFromEssential | ( | InputArray | E, |
OutputArrayOfArrays | Rs, | ||
OutputArrayOfArrays | ts | ||
) |
#include <opencv2/sfm/fundamental.hpp>
从基本矩阵获取运动(R 和 t)。
E | 输入 3x3 基本矩阵。 |
Rs | 输出 3x3 旋转矩阵向量。 |
ts | 输出 3x1 平移向量向量。 |
参考:[117] 9.6 页 259(结果 9.19)
int cv::sfm::motionFromEssentialChooseSolution | ( | InputArrayOfArrays | Rs, |
InputArrayOfArrays | ts, | ||
InputArray | K1, | ||
InputArray | x1, | ||
InputArray | K2, | ||
InputArray | x2 | ||
) |
#include <opencv2/sfm/fundamental.hpp>
从基本矩阵中选择四种可能的运动解之一。
Rs | 输入 3x3 旋转矩阵向量。 |
ts | 输入 3x1 平移向量向量。 |
K1 | 输入 3x3 第一个相机矩阵 \(K = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\)。 |
x1 | 输入 2x1 向量,包含第一个 2D 点。 |
K2 | 输入 3x3 第二个相机矩阵。参数与 K1 相似。 |
x2 | 输入 2x1 向量,包含第二个 2D 点。 |
通过检查匹配 x1-x2 的三角测量结果是否位于相机前方,来确定正确的解。返回正确解的索引,如果无解则返回 -1。
参考:参见 [117] 9.6 页 259(9.6.3 四个解的几何解释)。
void cv::sfm::normalizedEightPointSolver | ( | InputArray | x1, |
InputArray | x2, | ||
OutputArray | F | ||
) |
#include <opencv2/sfm/fundamental.hpp>
估计两组 2D 点(图像坐标空间)之间的基础矩阵。
x1 | 输入 2xN 数组,包含视图 1 中的 2D 点。 |
x2 | 输入 2xN 数组,包含视图 2 中的 2D 点。 |
F | 输出 3x3 基础矩阵。 |
使用归一化的 8 点基础矩阵求解器。参考:[117] 11.2 页 281(x1 = x,x2 = x')
void cv::sfm::normalizeFundamental | ( | InputArray | F, |
OutputArray | F_normalized | ||
) |
#include <opencv2/sfm/fundamental.hpp>
规范化基础矩阵。
F | 输入 3x3 基础矩阵。 |
F_normalized | 输出 3x3 归一化的基础矩阵。 |
默认情况下,将基础矩阵除以其 L2 范数。
void cv::sfm::projectionsFromFundamental | ( | InputArray | F, |
OutputArray | P1, | ||
OutputArray | P2 | ||
) |
#include <opencv2/sfm/fundamental.hpp>
从基础矩阵获取投影矩阵。
F | 输入 3x3 基础矩阵。 |
P1 | 输出 3x4 一个可能的投影矩阵。 |
P2 | 输出 3x4 另一个可能的投影矩阵。 |
void cv::sfm::relativeCameraMotion | ( | InputArray | R1, |
InputArray | t1, | ||
InputArray | R2, | ||
InputArray | t2, | ||
OutputArray | R, | ||
OutputArray | t | ||
) |
#include <opencv2/sfm/fundamental.hpp>
计算两个相机之间的相对相机运动。
R1 | 输入 3x3 第一个相机旋转矩阵。 |
t1 | 输入 3x1 第一个相机平移向量。 |
R2 | 输入 3x3 第二个相机旋转矩阵。 |
t2 | 输入 3x1 第二个相机平移向量。 |
R | 输出 3x3 相对旋转矩阵。 |
t | 输出 3x1 相对平移向量。 |
给定两个相机的运动参数,计算第二个相机的运动参数,假设第一个相机位于原点。如果 T1 和 T2 是相机运动,则计算出的相对运动为 \(T = T_2 T_1^{-1}\)