为图像采集创建循环缓冲区

时间:2012-10-14 15:50:08

标签: matlab

我是使用matlab进行编程的新手,并尝试执行以下操作:

我使用相机连续捕捉图像(尺寸1024x1024)以使用getdata功能获得实时图像。 为了进行测量,我想使用循环缓冲区仅存储100个图像 - 更确切地说,我想要存储100个图像并在获取新数据时擦除最旧的图像并对最后100个图像进行测量。

希望我的担忧是可以理解的......

感谢您的回答!

3 个答案:

答案 0 :(得分:1)

MathWorks的一名工作人员在这里回答了这个问题:Create a buffer matrix for continuous measurements。 (他还制作了一段视频:http://blogs.mathworks.com/videos/2009/05/08/implementing-a-simple-circular-buffer/

代码:

buffSize = 10;
circBuff = nan(1,buffSize);
for newest = 1:1000;
   circBuff = [newest circBuff(1:end-1)]
end

检查gnovice所做的更新,它将循环缓冲区应用于图像处理。

答案 1 :(得分:0)

您所谓的“循环缓冲区”称为队列 FIFO (先进先出)。通常这将存储在链表数据结构中,其中每个对象(在您的情况下为矩阵)指向下一个对象。然而,在Matlab中,没有内置的链表结构,但Matlab数组(向量/矩阵)在操作它们时非常灵活和高效。

因此,您可以将每个图像作为矩阵存储在长度为100的数组中,为您提供尺寸为100x1024x1024的3维矩阵。然后,当您获得新数据时,只需从数组中删除最后一个矩阵,然后在数组的开头插入一个新矩阵。希望这对你来说足够快。

祝你好运!

答案 2 :(得分:0)

您可以创建一个包含100个1024x1024矩阵的数组。并参考以下链接以保持读写位置。 logic of circular buffer