如何使用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获取相机投影矩阵?的主要内容,如果未能解决你的问题,请参考以下文章
在matlab中,关于PCA降维运算,求得特征向量矩阵之后,又要如何才能得到我需要的投影矩阵呢?