Проблемы с MATLAB: схема сжатия JPEG2000 с использованием набора инструментов Wavelet

Я и соратник работаем над аналогичной схемой сжатия JPEG2000 для проекта. Он использует Matlab и инструментарий Wavelet.

Есть 2 проблемы. Недостаточное знание JPEG2000 заставляет меня думать, что мне не хватает шагов для этого процесса сжатия. Вторая проблема - это фактическая ошибка, которая включает в себя: [dict,avglen] = huffmandict(cQ,p); % Create dictionary.
Ошибка:??? Ошибка при использовании ==> huffmandict при 174 повторении исходных символов

Я не уверен, имеет ли это отношение к повторяющимся значениям в матрице, потому что не было выполнено кодирование по длине прогона.

Ошибка в проекте ==> 41 [dict,avglen] = huffmandict(cQ,p); % Создать словарь.

Любые советы или информация будут полезны.
Кроме того, я не уверен, нужен ли мне этап предварительной обработки

Код выглядит следующим образом:

%wavelet based compression sub-band coding
clear all;
close all;
x=imread('1.png');%input image
n=input('enter the desired decompositon level '); %decompositon level
Q=input('enter the desired quantization step size '); %quantization level

%begin wavelet decomposition
c = [];
sx =  size(x);
s = zeros(n+2,length(sx));
if isempty(x) , return; end

s(end,:) = size(x);
for i=1:n
    [x,h,v,d] = dwt2(x,'haar'); % decomposition
    c = [h(:)' v(:)' d(:)' c];     % store details
    s(n+2-i,:) = size(x);          % store size
end

% Last approximation.
c = [x(:)' c];
s(1,:) = size(x);

%Begin Quantization

cQ=round(c/Q);

%Begin Entropy Encoding



scQ=length(cQ);
l=1;
for i=1:(scQ-1);
    l=l/2;
    p(i)=l;
end
p(scQ)=p(scQ-1);

[dict,avglen] = huffmandict(cQ,p); % Create dictionary.
actualsig = randsrc(100,1,[cQ; p]); % Create data using p.
comp = huffmanenco(actualsig,dict); % Encode the data.

1 ответ

Я знаю, что это только частичный ответ, но похоже, что ошибка вызвана тем, что ваш ввод содержит дубликаты.

Это можно предотвратить с помощью unique команда.

На этом сайте они рекомендуют что-то вроде:

[symbols,p]=hist(A,double(unique(A)))

Но так как я не уверен, как работает ваш ввод, возможно, вам придется использовать

unique([cQ; p],'rows')
Другие вопросы по тегам