如何连续更新2个图并在同一图中绘制相机(MATLAB)

时间:2016-03-10 19:10:10

标签: matlab plot computer-vision matlab-figure matlab-cvst

我的目标是不断绘制位置&使用MATLAB将相机相对于标记的方向。

要绘制三件事。(1)相机(2)所有圆点(3)原点' *' 相机和点都将在每个帧中移动。我在静态图中绘制了所有这三个东西,即使用hold on。如附图所示。

现在我想在与数值变化相同的图中连续(实时)绘制它们。到目前为止,我只能动态更新这些内容中的一个,即某些随机值的圆点。如果我添加另一个情节,它会发生冲突。请你告诉我如何在同一图和plotCamera中更新多个图。

hF = figure;
hAx = gca;
im_pt_2world=rand(3,3);
x_o=im_pt_2world(1,1); y_o=im_pt_2world(1,2); %origin of the calibrated world points
x_ip=im_pt_2world(:,1); y_ip=im_pt_2world(:,2);

hpoints = plot3(x_ip, y_ip,zeros(size(im_pt_2world, 1),1),'ro');


% I added the "ishandle" so the program will end in case u closed the figure
while (1) & ishandle(hpoints)

   %instead of using plot I directly change the data in the line
   % this is faster the plot if only because you don't need to reedefine the limits and labels...
im_pt_2world=rand(3,3);
x_ip=im_pt_2world(:,1); y_ip=im_pt_2world(:,2);


   set(hpoints,'ydata',y_ip);
   set(hpoints,'xdata',x_ip);
   drawnow  %updates the display

end

1 个答案:

答案 0 :(得分:1)

plotCamera函数(计算机视觉系统工具箱)返回图形对象的句柄,您可以通过编程方式进行操作。更改对象的属性(例如LocationOrientation)会在图中移动相机。 plotCamera的帮助示例显示了如何让相机在一个圆圈中飞行:

% Plot a camera pointing along the Y-axis
R = [1     0     0;
     0     0    -1;
     0     1     0];

% Setting opacity of the camera to zero for faster animation.
cam = plotCamera('Location', [10 0 20], 'Orientation', R, 'Opacity', 0);

% Set view properties
grid on
axis equal
axis manual

% Make the space large enough for the animation.
xlim([-15, 20]);
ylim([-15, 20]);
zlim([15, 25]);

% Make the camera fly in a circle
for theta = 0:pi/64:10*pi
    % Rotation about cameras y-axis
    T = [cos(theta)  0  sin(theta);
            0        1      0;
         -sin(theta) 0  cos(theta)];
    cam.Orientation = T * R;
    cam.Location = [10 * cos(theta), 10 * sin(theta), 20];
    drawnow();
end

如果您真的想玩得开心,可以在点击相机时提供要调用的功能句柄。例如,该功能可以显示相机看到的图像。