【问题标题】:Out of Memory using bsxfun MATLAB使用 bsxfun MATLAB 内存不足
【发布时间】:2014-09-16 07:13:31
【问题描述】:

我尝试使用 Burrows-Wheeler 变换来实现图像压缩。考虑路径扫描的一维矩阵是:

p = [2 5 4 2 3 1 5];

然后应用 Burrows-Wheeler 变换:

function output = bwtenc(p) 
n = numel(p);
x = zeros(length(p),1);
for i = 1:length(p)
    left_cyclic = mod(bsxfun(@plus, 1:n, (0:n-1).')-1, n) + 1;
    x = p(left_cyclic);
end
[lex ind] = sortrows(x);
output = lex(:,end);
output = uint8(output(:)');
end

而且它有效!但问题是当我尝试从大小为 512*512 的 Lena.bmp 实现一维矩阵时,错误消息显示 bsxfun 内存不足。请任何人帮助我。

【问题讨论】:

  • 循环是否必要? x 似乎在所有迭代中都采用相同的值
  • 感谢您的修改。我已经删除了循环但仍然是同样的问题。错误信息:使用 bsx fun 时出错,内存不足。请帮忙
  • 当然,内存问题不是因为循环。 bsxfun 正在尝试创建一个 512^2 x 512^2 方阵;这就是问题
  • 创建 512x512 矩阵怎么会有问题?你在什么系统配置? p 的大小是多少?
  • 那么你对我有什么建议吗?我使用 bsxfun 进行左循环排列。也许您有任何代码可以替换它?非常感谢您的帮助

标签: matlab image-compression


【解决方案1】:

看看这是否适合你 -

function output = bwtenc(p) 
np = numel(p);
[~,sorted_ind] = sort(p);
ind1 = mod((1:np)+np-2,np)+1;
output = p(ind1(sorted_ind));
output = uint8(output(:)');
end

【讨论】:

  • 非常感谢您的帮助@Divakar。但这不是我想要的。我想要的输出是
  • p = [2 5 4 2 3 1 5; 5 4 2 3 1 5 2; 4 2 3 1 5 2 5; 2 3 1 5 2 5 4; 3 1 5 2 5 4 2; 1 5 2 5 4 2 3; 5 2 5 4 2 3 1];
  • @yudha25 当我使用 p = [2 5 4 2 3 1 5] 作为代码的输入时,我得到了这个 - [3 4 5 2 5 1 2]。那么,先更正您的代码?
  • @yudha25 你想要的输出是-p(left_cyclic),即p(mod(bsxfun(@plus, 1:n, (0:n-1).')-1, n) + 1)。如果你的 p 是 1*262144,那么无论如何你都希望得到一个输出 262144x262144。所以,你必须得到内存不足的错误!但无论如何,您函数的输出与您刚才所说的上述评论中的预期输出不匹配。你能澄清所有这些问题吗?
  • 这就是问题所在。我怎样才能避免那个内存错误?
猜你喜欢
  • 2015-05-23
  • 2014-05-20
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 2011-04-03
相关资源
最近更新 更多