use*_*678 4 performance matlab image-processing computer-vision matlab-cvst
我正在编写一个用于车道检测的算法,
这是我用过的骨架代码,
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
Run Code Online (Sandbox Code Playgroud)
这是模拟的视频https://www.youtube.com/watch?v=K881hFCyiQ8,问题:输出视频在显示每个帧后变得越来越慢,但是一旦关闭图形窗口,它就会自动重启(当代码运行时,它变得更快(检查视频).为什么会发生这种情况,是否有一些内存积累正在减缓绘图速度?除了手动关闭图形窗口外,我还能做些什么来加快速度?
我知道有一个video.ShapeInserter对象可用,它比我用过的绘图方法更快.我没有使用它的原因是因为更改了视频中的线条粗细.ShapeInserter对象仅在2014版本中出现,我使用的是2013版本.我希望我的车道检测有非常明显的粗线.
请给我一些建议.
编辑:这是应用Shai建议的编辑后的视频.https://www.youtube.com/watch?v=LJ_may0hkaE&feature=youtu.be
基本上,由于hold on轴处理的状态,所有帧都会在您的图形中添加到另一个帧中.这会导致内存堆积并减慢您的速度.
您应该hold在绘制线条后关闭,因此imshow下一帧的内容将丢弃前一帧.
imshow(currentFrame);
hold on;
plot( theLinesThatWereDetected );
hold off; %// super critical!
drawnow; %// instead of pause
Run Code Online (Sandbox Code Playgroud)
drawnow而不是使用更好的做法pause(0.001).XData和YData你的情节(所建议Benoit_11)是不够的,它并没有解决造成图中的"持有"所有的帧存储器的浪费.