在图像上滑动窗口导致“内存不足或尺寸太大而不适合Octave的索引类型”

时间:2017-09-15 04:40:12

标签: octave

当我在图片上运行mode时,我收到错误消息:

  

错误:对于Octave的索引类型,内存或维度太大   错误:从中调用       im2col在134行第13列       nlfilter在第79行第8栏       第11行第7行的colour_blocks

这里究竟是什么问题,我该怎么做才能克服这个问题?是不是我在图像上迭代效率低?目的是在图像上创建一个滑动窗口(256x256),并计算每个窗口中最常用的颜色。

pkg load image;
pkg load signal;

% the image is quite small 400x400px
i = uint32(imread('foo.jpg'));


% encode 3 channel image into single channel
ienc = 1+bitor(bitor(i(:,:,1), bitshift(i(:,:,2),8)), bitshift(i(:,:,3),16));

% find the mode
imode = nlfilter(ienc, [256 256], @(x) mode(x(x~=0)));

1 个答案:

答案 0 :(得分:0)

是的,问题是你的滑动窗口太大了。看看nlfilter source code

256 * 256窗口意味着每个窗口都有65536个元素。如果您的图像是1024 * 1024,那么您将拥有6.8719e + 10个视图,但是使用32位索引构建的Octave无法处理超过2147483647个元素的数组。此外,如果您的图像是double类,则视图将占用大约550GB内存。