在一个相当小的矩阵上内存不足

时间:2013-04-02 16:34:54

标签: matlab

我正在对一个相当小的视频进行运动检测。 56帧288x384xRGB。我保留了两份副本,所以它应该达到大约40 Mb的顶部,包括我的其他变量。

现在,这行给了我一个内存不足的错误

output = uint8(zeros(this.videoHeight,2.*this.videoWidth,3,size(this.originalFrames,4)));

输入内存报告

 >> memory
Maximum possible array:             202 MB (2.114e+08 bytes) *
Memory available for all arrays:    863 MB (9.045e+08 bytes) **
Memory used by MATLAB:              527 MB (5.526e+08 bytes)
Physical Memory (RAM):             3071 MB (3.220e+09 bytes)

*  Limited by contiguous virtual address space available.
** Limited by virtual address space available.
>> 

我是MATLAB的新手,但并不是全新的编程。我不明白的是什么?

修改 的 所以我做了som disp'ing:

        disp(this.videoHeight)
        disp(2.*this.videoWidth)
        disp(size(this.originalFrames,4))

产生

288

768

54

所以,它实际上比我建议的要小......

2 个答案:

答案 0 :(得分:0)

我没有详细查看,但如果没有相当多的Matlab强加的开销,我会感到惊讶。你可能会使用比你想象的更多的内存。

尝试调低您处理的帧数,看看是否能解决问题。

答案 1 :(得分:0)

你应该使用

zeros(..., 'uint8')

而不是

uint8(zeros(...))

首先避免以双精度创建数组,然后将其复制到uint8数组。