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

时间:2016-03-14 03:25:25

标签: matlab computer-vision matlab-cvst calibration

首先感谢您的关注。

最近我正在尝试使用Andrea Fusiello1,Emanuele Trucco2,Alessandro Verri3提供的Matlab程序,在一个紧凑的算法中纠正立体声对以纠正我在我的两个摄像头中获得的图片立体校准研究项目。

虽然Matlab代码并不复杂,但如何获取两个摄像头的投影矩阵仍然让我很困惑。 我使用以下Matlab代码来获取每个摄像机的内部矩阵和R和T.我想我可以使用公式得到投影矩阵:P = A1 * [R | T]。但是,如图所示,结果很奇怪。

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

matlab代码:

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

files{i} = 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);

结果:

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

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

P = [R;t] * K

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