标签: extrinsic-parameters

如何根据已知的内在和外在参数在Matlab中进行透视校正?

我正在使用Matlab进行相机校准,使用Jean-Yves Bouget的相机校准工具箱.我有校准程序中的所有相机参数.当我使用不在校准集中的新图像时,我可以获得其变换方程,例如Xc = R*X + T,其中X是世界框架中校准装备(平面)的3D点,Xc是其坐标相机架.换句话说,我拥有一切(外在和内在参数).

我想要做的是对此图像执行透视校正,即我希望它删除任何透视图并看到校准装置未失真(它是一个棋盘).

Matlab的新计算机视觉工具箱有一个对象,在给定3X3矩阵H的情况下对图像执行透视变换.问题是,我不能从已知的内在和外在参数计算这个矩阵!

matlab computer-vision extrinsic-parameters matlab-cvst

14
推荐指数
1
解决办法
1万
查看次数

相机姿态估计(OpenCV PnP)

我试图通过使用我的网络摄像头从具有已知全球位置的四个基准点的图像中获得全局姿势估计.

我检查了很多stackexchange问​​题和一些文章,我似乎无法得到一个正确的解决方案.我得到的位置编号是可重复的,但绝不与摄像机移动成线性比例.仅供参考我使用的是C++ OpenCV 2.1.

在这个链接上描绘了我的坐标系和下面使用的测试数据.

% Input to solvePnP():
imagePoints =     [ 481, 831; % [x, y] format
                    520, 504;
                   1114, 828;
                   1106, 507]
objectPoints = [0.11, 1.15, 0; % [x, y, z] format
                0.11, 1.37, 0; 
                0.40, 1.15, 0;
                0.40, 1.37, 0]

% camera intrinsics for Logitech C910
cameraMat = [1913.71011, 0.00000,    1311.03556;
             0.00000,    1909.60756, 953.81594;
             0.00000,    0.00000,    1.00000]
distCoeffs = [0, 0, 0, 0, 0]

% output of solvePnP():
tVec = [-0.3515;
         0.8928; 
         0.1997]

rVec = [2.5279; …
Run Code Online (Sandbox Code Playgroud)

opencv computational-geometry camera-calibration pose-estimation extrinsic-parameters

10
推荐指数
1
解决办法
1万
查看次数

如何计算一台摄像机相对于第二台摄像机的外部参数?

我已根据某个世界坐标系校准了2个摄像头.我知道相对于世界框架的每一个的旋转矩阵和平移向量.从这些矩阵如何计算一个摄像机相对于另一个摄像机的旋转矩阵和平移矢量?

请给我任何帮助或建议.谢谢!

calibration computer-vision camera-calibration rotational-matrices extrinsic-parameters

8
推荐指数
2
解决办法
2842
查看次数

为什么直接线性变换(DLT)不能提供最佳的相机外部效应?

solvePnP()在OpenCV中读取函数的源代码,当flagsparam使用默认值时SOLVEPNP_ITERATIVE,它调用cvFindExtrinsicCameraParams2,其中它首先使用DLT算法(如果我们有一组非平面的3D点)来初始化6DOF相机姿势,和SECOND用于CvLevMarq solver最小化重投影错误.

我的问题是:DLT将问题形成为线性最小二乘问题并用SVD分解解决它,它似乎是一个最优解,为什么我们之后仍然使用Lev-Marq迭代方法?

或者,DLT算法的问题/限制是什么?为什么封闭形式的解决方案导致成本函数的LOCAL最小值?

opencv least-squares extrinsic-parameters opencv-solvepnp

7
推荐指数
1
解决办法
2748
查看次数

用opencv确定外部相机,用世界空间物体打开opengl

我正在使用opencv和openframeworks(即opengl)来计算图像中的相机(世界变换和投影矩阵)(以及后来的几个图像用于三角测量).

出于opencv的目的,"平面图"成为世界中心0,0,0的对象(即棋盘).世界/楼层位置是已知的,因此我需要获得投影信息(失真系数,fov等)和相机的外部坐标.

2D输入坐标

我已经将这些平面图的视图位置映射到标准化视图空间中的2D图像上([0,0]是左上角.[1,1]是右下角).

对象(平面图/世界点)在xz平面上,-y向上,所以我转换为xy平面(这里不确定z-up是负的还是正的......)对于opencv,因为它需要是平面的

ofMatrix4x4 gWorldToCalibration(
    1, 0, 0, 0,
    0, 0, 1, 0,
    0, 1, 0, 0,
    0, 0, 0, 1
    );
Run Code Online (Sandbox Code Playgroud)

我将1,1作为ImageSize传递给校准相机.标志CV_CALIB_FIX_ASPECT_RATIO|V_CALIB_FIX_K4|CV_CALIB_FIX_K5 calibrateCamera运行成功,给我一个低错误(通常是周围0.003).

使用calibrationMatrixValues我得到一个明智的FOV,通常在50度左右,所以我很确定内在属性是正确的.

现在计算相机的外在世界 - 空间变换......我不相信我需要使用,solvePnP因为我只有一个对象(虽然我之前用它尝试了所有这些并返回相同的结果)

//  rot and trans output...
cv::Mat& RotationVector = ObjectRotations[0];
cv::Mat& TranslationVector = ObjectTranslations[0];

//  convert rotation to matrix
cv::Mat expandedRotationVector;
cv::Rodrigues(RotationVector, expandedRotationVector);

//  merge translation and rotation into a model-view matrix
cv::Mat Rt = cv::Mat::zeros(4, 4, CV_64FC1);
for (int y = 0; y …
Run Code Online (Sandbox Code Playgroud)

opengl opencv camera-calibration extrinsic-parameters

6
推荐指数
1
解决办法
5371
查看次数

如何使用opencv找到具有内在和外在参数的点的3d位置

我想用opencv找到一个点的位置.我使用cvCalibrateCamera2校准了两台相机.所以我知道内在和外在的参数.我读了一个已知的内在和外在参数,我可以轻松地通过三角测量重建三维.opencv中是否有一个函数可以实现这一点.我认为cvProjectPoint2可能很有用,但我不明白究竟是什么.那我怎么能找到一个点的三维位置.

谢谢.

opencv computer-vision 3d-reconstruction extrinsic-parameters

6
推荐指数
1
解决办法
2407
查看次数

如何从相机校准数据绘制相机和图像位置?

我有相机的内在和外在参数.外在的是具有旋转和平移的4×4矩阵.

我有样本数据,我有一个每个摄像头拍摄的图像.

2.11e-001 -3.06e-001 -9.28e-001 7.89e-001 
6.62e-001 7.42e-001 -9.47e-002 1.47e-001 
7.18e-001 -5.95e-001 3.60e-001 3.26e+000 
0.00e+000 0.00e+000 0.00e+000 1.00e+000
Run Code Online (Sandbox Code Playgroud)

我想绘制Matlab校准工具包页面上给出的图像 相机居中 要么 世界为中心 但是我无法弄清楚如何绘制这两幅图像的数学.

我唯一的领导是来自这个页面http://en.wikipedia.org/wiki/Camera_resectioning.这告诉我相机位置可以通过C = - R`找到.Ť

知道如何实现这个任务吗?

language-agnostic math matrix camera-calibration extrinsic-parameters

5
推荐指数
1
解决办法
4290
查看次数

Java Flyweight模式:外在和内在状态?

我对Flyweight模式的这些状态的差异感到困惑.

我知道intrinsic状态是共享的状态,而Extrinsic不是.

但是,我没有看到extrinsic状态在模式中或以下示例中的重要性:

public static void main(String[] args) {
        // Create the flyweight factory...
        EngineFlyweightFactory factory = new EngineFlyweightFactory();
        // Create the diagnostic tool
        DiagnosticTool tool = new EngineDiagnosticTool();
        // Get the flyweights and run diagnostics on them
        Engine standard1 = factory.getStandardEngine(1300); //intrinsic
        standard1.diagnose(tool); //extrinsic

        Engine standard2 = factory.getStandardEngine(1300); //intrinsic
        standard2.diagnose(tool); //extrinsic

        Engine standard3 = factory.getStandardEngine(1300); //intrinsic
        standard3.diagnose(tool); //extrinsic

        Engine standard4 = factory.getStandardEngine(1600); //intrinsic
        standard4.diagnose(tool); //extrinsic

        Engine standard5 = factory.getStandardEngine(1600); //intrinsic
        standard5.diagnose(tool); …
Run Code Online (Sandbox Code Playgroud)

java design-patterns flyweight-pattern extrinsic-parameters

2
推荐指数
1
解决办法
1436
查看次数

Matlab detectCheckerboardPoints不完美

我最近使用Matlab 单摄像机校准应用程序算法来校准相机内在函数和外在函数.在找到棋盘的角落时,很多时候detectCheckerboardPointsMatlab的功能执行(准确性)opencv api cv::findChessboardCorners,但在某些图片上,Matlab表现得很奇怪.

例如,在下图中,可以清楚看到棋盘方块之间的角落,而matlab在奇怪的地方找到了多余的角落:

  1. 原始图像://应该有5*8 = 40个内角点 在此输入图像描述

  2. 在未失真的图像上找到角点:// 6*9 = 54找到 在此输入图像描述

  3. 在原始图像上找到的点:// 6*10 = 60 ... 在此输入图像描述

matlab代码片段很简单,如下所示:

img=imread(fn);
[imUndist, newOrig]=undistortImage(img, cameraParams);
[pxs, bdsize]=detectCheckerboardPoints(imUndist); %or detect on 'img' directly
imMarked=insertMarker(imUndist, pxs);
imshow(imMarked);
Run Code Online (Sandbox Code Playgroud)
  1. opencv在此图像上检测到(下面的代码)的角非常精确:

// opencv代码:

Mat img = imread(fpath);
int ww = 8, hh = 15;
cv::Size bsz(ww, hh);
vector<Point2f> ptvec;
bool found = cv::findChessboardCorners(img, bsz, ptvec, CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE);
cv::drawChessboardCorners(img, bsz, ptvec, found);
imshow("img", img);
waitKey();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

matlab opencv camera-calibration extrinsic-parameters corner-detection

1
推荐指数
1
解决办法
712
查看次数