我有一些我希望制作成电影的时间序列数据。数据可以是2D(约500x10000)或3D(500x500x10000)。对于2D数据,电影帧只是使用plot
的线条图,对于3D数据,我们可以使用surf
,imagesc
,contour
等。然后我们创建一个视频在MATLAB中使用这些帧的文件,然后使用ffmpeg
压缩视频文件。
为了快速完成,人们会尝试不渲染所有要显示的图像,也不会将数据保存到磁盘,然后在此过程中再次读取。通常,人们可以使用getframe
或VideoWriter
在MATLAB中创建电影,但如果试图不将图形显示在屏幕上,它们似乎很容易变得棘手。有些人甚至建议在隐藏的数字中绘图,然后将它们作为.png
文件保存为磁盘,然后使用ffmpeg
(例如使用x265
编码器将其压缩为.mp4
)。但是,在我的iMac中保存imagesc
的输出第一次需要3.5秒,然后是0.5秒。我还发现将这么多文件保存到磁盘只是为了让ffmpeg
再次读取它们的速度不够快。一个人可以hardcopy
建议plot
数据,但我不确定它是否有效,无论绘图方法如何(例如surf
,ffmpeg
等),以及如何将数据传输到immovie
,只需最少的磁盘访问。
这与this类似,但Route::get( 'foopage', function(){ return view( 'templates.foo' ); });
太慢了。这篇文章this是类似的,但主张将图像写入磁盘然后读取它们(缓慢的IO)。
答案 0 :(得分:0)
也许您要做的是通过执行surf
或imagesc
或contour
正在执行的同类操作将数据转换为图像然后再写它直接写入文件,这将把所有数据保存在内存中,直到需要写入为止。
我对真实图像的经验很少,也可以在这里工作:
我看到调用imshow
需要花费很多时间,但更改CData
函数创建的预设图形的imshow
花了大约5ms,所以,也许你可以使用任何一个来设置一个数字您喜欢的功能,然后更新基础XData
,YData
等,以便图形以相同的方式更新?