当我在图片上运行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)));
答案 0 :(得分:0)
是的,问题是你的滑动窗口太大了。看看nlfilter
source code。
256 * 256窗口意味着每个窗口都有65536
个元素。如果您的图像是1024 * 1024,那么您将拥有6.8719e + 10个视图,但是使用32位索引构建的Octave无法处理超过2147483647个元素的数组。此外,如果您的图像是double类,则视图将占用大约550GB内存。