如何使用matlab获取相机投影矩阵?

Posted

技术标签:

【中文标题】如何使用matlab获取相机投影矩阵?【英文标题】:how to get camera projection matrix using the matlab? 【发布时间】:2016-03-14 03:25:25 【问题描述】:

首先感谢您的关注。

最近我正在尝试使用 Andrea Fusiello1、Emanuele Trucco2、Alessandro Verri3 在A compact algorithm for rectification of stereo pair中提供的 Matlab 程序来校正从我的两个摄像头获取的图片立体校准研究项目。

虽然Matlab代码并不复杂,但是如何得到两个相机的投影矩阵还是让我很困惑。 我使用以下 Matlab 代码来获取每个相机的内部矩阵和 R 和 T。而且我想我可以使用以下公式得到投影矩阵:P = A1*[R|T]。但是,正如您在图片中看到的那样,结果很奇怪。

所以我认为我得到的投影矩阵有问题。谁能告诉我如何正确获取投影矩阵?

matlab代码:

numImages = 9;
files = cell(1, numImages);
for i = 1:numImages

filesi = fullfile(matlabroot, 'toolbox', 'vision', 'visiondata', ...
    'calibration', 'left', sprintf('left%d.bmp', i));
end
[imagePoints, boardSize] = detectCheckerboardPoints(files);
squareSize = 120; 
worldPoints = generateCheckerboardPoints(boardSize, squareSize);
cameraParams = estimateCameraParameters(imagePoints, worldPoints);
imOrig = imread(fullfile(matlabroot, 'toolbox', 'vision', 'visiondata', ...
    'calibration', 'left', 'left9.bmp'));
[imagePoints, boardSize] = detectCheckerboardPoints(imOrig);
[R, t] = extrinsics(imagePoints, worldPoints, cameraParams);

后果:

【问题讨论】:

【参考方案1】:

计算机视觉系统工具箱中有一个内置函数cameraMatrix 用于计算相机投影矩阵。

但是,如果您尝试进行立体校正,则应使用Stereo Camera Calibrator app 校准一对立体相机,然后使用rectifyStereoImage 功能。见this example。

要记住的是,计算机视觉系统工具箱中的函数使用后乘约定,即行向量乘以矩阵。正因为如此,旋转矩阵和相机投影矩阵是它们在 Trucco 和 Veri 以及其他教科书中的对应部分的转置。所以cameraMatrix使用的公式是

P = [R;t] * K

所以P 最终是 4×3,而不是 3×4。这可以解释为什么你会得到奇怪的结果。

【讨论】:

感谢您的帮助!

以上是关于如何使用matlab获取相机投影矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

如何从相机投影矩阵计算 ext 和 int 参数

如何根据两个连续帧的投影变换矩阵估计相机姿态?

相机标定:投影矩阵

在matlab中,关于PCA降维运算,求得特征向量矩阵之后,又要如何才能得到我需要的投影矩阵呢?

LibGDX从使用变换投影矩阵绘制的TextureRegion获取坐标?

将图像从圆柱体内部投影到二维平面 [Matlab]