我是使用 matlab 编程并尝试执行以下操作的新手:
我使用 getdata 函数不断地用相机捕捉图像(尺寸 1024x1024)以获得实时图像。要进行测量,我想使用循环缓冲区仅存储 100 张图像——更准确地说,我正在考虑存储 100 张图像并在获取新数据时擦除最旧的图像,并对最后 100 张图像进行测量。
希望我的担心是可以理解的...
感谢您的回答!
我是使用 matlab 编程并尝试执行以下操作的新手:
我使用 getdata 函数不断地用相机捕捉图像(尺寸 1024x1024)以获得实时图像。要进行测量,我想使用循环缓冲区仅存储 100 张图像——更准确地说,我正在考虑存储 100 张图像并在获取新数据时擦除最旧的图像,并对最后 100 张图像进行测量。
希望我的担心是可以理解的...
感谢您的回答!
MathWorks 的一位工作人员在此回答了这个问题:为连续测量创建一个缓冲矩阵。(他还制作了一段视频: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 所做的更新,该更新将循环缓冲区应用于图像处理。
您所说的“循环缓冲区”被称为队列或FIFO(先进先出)。通常这将存储在链表数据结构中,其中每个对象(在您的情况下为矩阵)都指向下一个对象。然而,在 Matlab 中,没有内置的链表结构,但是在操作它们时,Matlab 数组(向量/矩阵)非常灵活和高效。
因此,您可以简单地将每个图像存储为长度为 100 的数组中的矩阵,从而为您提供一个尺寸为 100x1024x1024 的 3 维矩阵。然后,当您获得新数据时,您只需从数组中删除最后一个矩阵并在数组的开头插入一个新矩阵。希望这对您来说足够快。
祝你好运!
愿你能创建一个由 100 个 1024x1024 矩阵组成的数组。并参考以下链接以保持读写位置。 循环缓冲区的逻辑