【问题标题】:How to perform faster updation of data in my image using matlab?如何使用 matlab 更快地更新图像中的数据?
【发布时间】:2014-12-22 16:12:23
【问题描述】:

我正在编写车道检测算法,

这是我用过的骨架代码,

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

【问题讨论】:

  • 您是否可以尝试更新该行的 de XData 和 YData 属性,而不是在循环中发出对“plot”的新调用?那应该更快
  • 另外,使用'drawnow'代替暂停
  • 如果您获得了更新版本的 matlab,我建议您使用 insertShape 函数将线条绘制到图像中,并使用 vision.VideoPlayer 显示它。 insertShape 现在有一个设置线条粗细的选项。
  • @Dima 不幸的是,我使用的是 2013 版本。
  • 如果你有一个封闭的多边形,那么你可以使用vision.ShapeInserter来绘制一个填充的多边形,并使其半透明。这将使您的线条可见。

标签: performance matlab image-processing computer-vision matlab-cvst


【解决方案1】:

问题:

基本上,由于您的坐标区句柄处于hold on 状态,所有帧都会一个接一个地添加到您的图形中。这会导致内存堆积并减慢您的速度。

解决办法:

画完线后要关闭hold,这样下一帧的imshow会丢弃前一帧。

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

评论:

  1. 正如Ander 所指出的,最好使用drawnow 而不是pause(0.001)
  2. 仅仅改变你的情节的XDataYData(如Benoit_11所建议的那样)是不够的,它并不能解决“持有”图中所有帧造成的内存浪费。

【讨论】:

  • @Benoit_11 欢迎您,抱歉您的用户名中的拼写错误。
  • @Benoit_11 一般来说,我相信更新 XDataYData 的情节应该比 hold on/hold off 切换更可取。但是,在这种情况下,您需要对框架的 CData 执行此操作,这使得切换 hold 成为一种更具吸引力的解决方案。
  • 太棒了!像魅力一样工作。谢谢你,Ander、Benoit、shai。
  • h = imshow(currentFrame);设置(h,'XData',x,'YData',y);这是@Benoit_11 建议的吗?
  • @user10678 您需要有两个句柄:一个用于图像,一个用于绘图:ih = imshow(currFrame); ph=plot(currentLane); 第一次。然后,对于所有其他帧set(ih,'CData',currFrame);set(ph, 'XData', laneX, 'YData', laneY);。不过,由于您绘制了两条车道,因此您可能拥有多个 ph 句柄。您需要自己检查一下。
猜你喜欢
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多