Matlab如何计算摄像机视角?

时间:2010-05-31 19:28:38

标签: matlab

我正在使用matlab来可视化场景。为了放大场景,我可以通过eather做到这一点: - 修复相机位置和cameratarget并更改cameraviewangle.or - 修复cameratarget和cameraview角度并沿着查看线移动相机(由cameraPosition和cameraTarget定义)。

我知道如何设置cameraposition CameraTarget和viewangle的值,但我不知道如何定义最佳视角。在cameraviewangle的自动模式下,matlab计算最精确的视角,从捕获的摄像机位置捕获所有场景。理解这一点,我感谢任何帮助。

伊曼

2 个答案:

答案 0 :(得分:1)

在MATLAB中,摄像机视角基本上与“缩放”功能相同,因为没有透视失真。视角越小,图像被有效放大的次数越多,因为视口被放大以适应图形窗口的大小。

The documentation of 'camva'包含此示例,该示例创建了两个按钮来放大/缩小场景:

% Set the range checking in the callback statements to keep
% the values for the camera view angle in the range greater 
% than zero and less than 180.
uicontrol('Style','pushbutton',...
  'String','Zoom In',...
  'Position',[20 20 60 20],...
  'Callback','if camva <= 1;return;else;camva(camva-1);end');
uicontrol('Style','pushbutton',...
  'String','Zoom Out',...
  'Position',[100 20 60 20],...
  'Callback','if camva >= 179;return;else;camva(camva+1);end');
% Now create a graph to zoom in and out on:
surf(peaks);

因此,如果要缩放,请调整视角。如果要自动“缩放”以适合整个场景,请设置:

camva('auto');

答案 1 :(得分:0)

我可能会过度简化这一点,但不应该归结为几何?如果您拥有相机相对于场景的位置,则应该能够使用场景的宽度来确定包含所有场景所需的角度。例如,如果宽度为“w”的场景在以直角观看时距离相机的距离为“d”,则可以使用正弦定律推导出所需的最小视角:

alpha=arcsin(w/sqrt(d^2+(w/2)^2))

所以从图像:

alt text

您的相机将定位在C处,您的场景宽度“w”将是线段AB。从相机到场景的距离“d”是线段CD,最小视角是ACB。