Я пытаюсь реализовать сжатие изображений с помощью преобразования Берроуза-Уилера. Рассмотрим одномерную матрицу сканирования пути:
p = [2 5 4 2 3 1 5];
а затем применить преобразование Берроуза-Уилера:
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
И это работает! Но проблема в том, что когда я пытаюсь реализовать 1D-матрицу из Lena.bmp размером 512 * 512, появляется сообщение об ошибке, показывающее, что bsxfun не хватает памяти. Кто-нибудь, пожалуйста, помогите мне.
x
, кажется, принимает одинаковые значения во всех итерациях - person Luis Mendo   schedule 16.09.2014bsxfun
пытается создать квадратную матрицу 512^2 x 512^2; Это проблема - person Luis Mendo   schedule 16.09.2014p
? - person Divakar   schedule 16.09.2014p
равен 512 ^ 2 x 1, поэтомуleft_cyclic
(илиx
) равен 512 ^ 2 x 512 ^ 2. Это большая матрица. Я не вижу, как избежать его создания, так как вам нужно отсортировать его строки - person Luis Mendo   schedule 16.09.2014