当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 如何使用matlab在我的图像中更快地更新数据?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在编写一个用于车道检测的算法, 这是我用过的骨架代码, while ~isDone(video) currentFrame = getFrame(video); . . % Do segmentation and lane detection . figure(1),imshow(currentFrame),hold on figure(1),plot( theLine
我正在编写一个用于车道检测的算法,

这是我用过的骨架代码,

while ~isDone(video)
   currentFrame = getFrame(video);
   .
   . % Do segmentation and lane detection
   .
   figure(1),imshow(currentFrame),hold on
   figure(1),plot( theLinesThatWereDetected );
   pause(.0001); % without pause the plot command wouldn't work like a streamer.
end

这是模拟的视频https://www.youtube.com/watch?v=K881hFCyiQ8,
问题:输出视频在显示每个帧后变得越来越慢,但是一旦我关闭图形窗口它就会自动重启(随着代码的运行)并且它变得更快(检查视频).为什么会发生这种情况,是否有一些内存积累正在减缓绘图速度?除了手动关闭图形窗口外,我还能做些什么来加快速度?

我知道有一个video.ShapeInserter对象可用,它比我用过的绘图方法更快.我没有使用它的原因是因为更改了视频中的线条粗细.ShapeInserter对象仅在2014版本中出现,我使用的是2013版本.我希望我的车道检测有非常明显的粗线.

请给我一些建议.

编辑:这是应用Shai建议的编辑后的视频. https://www.youtube.com/watch?v=LJ_may0hkaE&feature=youtu.be

问题:

基本上,由于轴处理的保持状态,所有帧都会添加到您的图形中,这会导致内存增加并减慢您的速度.

解:

在绘制线条后应该关闭保持,因此下一帧的imshow将丢弃前一帧.

imshow(currentFrame);
hold on;
plot( theLinesThatWereDetected  );
hold off; %// super critical!
drawnow; %// instead of pause

评论:

>正如Ander所指出的,最好使用drawnow而不是暂停(0.001).
>只更改绘图的XData和YData(如Benoit_11所示)是不够的,它不能解决因“保持”图中所有帧而导致的内存浪费.

网友评论