如何在 Matlab 中制作矢量图形视频?

How to have Vector Graphics Video in Matlab?

我想要一个矢量图形视频输出,这样我就可以在 Matlab 2016a 中播放视频时调整 window 的大小。 我希望在图片中具有与 .eps 3 格式相似的特征,但对于视频。 伪代码的一些概述

  1. 在 10 秒内以 .mat 格式读取图片数据,因此您可以选择可能适用于视频的任何矢量图片格式
  2. colormap(gray) 中有图形句柄,而不是先将图片存储到 imgRGB/imgPNG/... 并进行特定自定义
  3. 将图形句柄 hFig 添加到列表 signal
  4. 视频的循环图形句柄

我不确定列表中有很多图形句柄并将它们循环到一个主要图形中。 这可能是不可能的。

我目前使用非矢量化 imgRGB/imgPNG/... 的方法我想拒绝,因为调整大小 window 和缩放 [=20= 有几个问题]

伪代码

%% Make vector graphics pictures that are parts of the video
signal=[];
for k=1:3
    A=load(filenameMat); % = A.time, A.potential, A.matrix
    % TODO convert to some vector form each picture which should work in video too

    % I can make N .eps pictures and figure handle to all of them. 
    % So probably having a list of those figure handles is the way to go. 
    hFig=figure(); % but not sure if possible with vectorised video play

    signal=cat(2,signal,hFig); % pseudo
end

%% Put parts together in the main Figure i.e. video
% 
windowWidth = 320;
hFig=figure('Menubar','figure', 'NumberTitle','off', 'Color','k', 'Visible', 'on');
hImg = imshow(signal(:,1:1 + windowWidth,:), ...
    'InitialMagnification', 100, 'Border', 'tight');

vid = VideoWriter('signal.avi');
vid.Quality = 100;
vid.FrameRate = 60;
open(vid);

M = size(signal,2);
for k=1:(M - windowWidth)
    set(hImg, 'CData', signal(:,k:k + windowWidth,:))
    writeVideo(vid, getframe());
end

close(vid);

如何在 Matlab 中输出矢量图形视频?

无法放置 vector graphics into a video. Any video format supported by MATLAB (and any video format I know) is based on raster graphics。编写视频时,您必须接受它是光栅化的。

你的代码还有一个问题,我不明白。您已经从光栅图像 (signal(:,1:1 + windowWidth,:)) 开始。您可以达到的最佳质量是以完全相同的分辨率编写视频,而不是添加任何额外的光栅化。对于这种特殊情况,使用 writeVideo(vid, signal(:,k:k + windowWidth,:));

通常,共享基于矢量图形的 "video" 的最佳方式是共享生成图形的 运行 可用代码。例如,这就是 Adob​​e Flash、Microsoft Silverlight 和类似产品所做的。您可以选择相同的方式并将生成图形的代码共享为空白源代码(需要 MATLAB 运行)或作为 JAR(需要您拥有 Compiler SDK,昂贵!)。

为了以便宜且易于访问的方式分享 10 个矢量图形的 10 秒视频,我会使用一些 HTML/JS 将它们包装成动画。您最终会得到 12 个松散文件,但所有标准技术都可以在大多数系统上查看。