我正在使用extrinsics函数进行一个项目,该项目旨在确定物体与相机的距离,这些物体上附有棋盘格。这是针对视频中的每个帧完成的。我的工作流程非常简单:
将非对称棋盘附加到每个对象
使用~20张图像
上的图像处理工具箱校准相机每个框架
while checkerboardsFound < numCheckerboards
% Undistort the image
data = undistortImage(data, cameraParams);
% Get the checkerboard points in the frame
[imagePoints, boardSize] = detectCheckerboardPoints(data);
worldPoints = generateCheckerboardPoints(boardSize, squareSize);
% Get the rotation and translation
[rot, trans] = extrinsics(imagePoints,worldPoints, cameraParams);
% <Draw a black rectangle over the area where the checkerboard points are
% using the imagePoints matrix. This "hides" the checkerboard so we can
% run the detectCheckerboardPoints(data) function again and find a different
% one.>
data = hideCheckerboard(data,...
[imagePoints(1,:);...
imagePoints(end,:)]);
checkerboardsFound = checkerboardsFound + 1;
end;
我的问题,当我找到两个相距约5厘米的特定棋盘时,查看 extrinsics返回的各自平移向量的Z值< / em>功能,我希望看到大约50个单位(5厘米)的差异。但是,我看到了相当大的差异 - 例如约400个单位(40厘米)。我确定棋盘的方形尺寸是正确定义的(每个5毫米)。这些镜头来自三星智能手机,以视频模式捕捉(应用放大倍率)。
有人可以帮助确定导致这些Z值差异的原因吗?以这种方式使用 extrinsics 功能是否过于雄心勃勃?