MATLAB的问题:使用小波工具箱的JPEG2000压缩方案

时间:2012-05-02 20:32:10

标签: image matlab wavelet

我和一个队友正在为一个项目开发JPEG2000类似的压缩方案。它利用了matlab和小波工具箱。

有两个问题。我对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 个答案:

答案 0 :(得分:-1)

我知道这只是部分答案,但似乎错误是由于您的输入包含重复项而导致的。

使用unique命令可以防止这种情况。

this website上,他们推荐的内容如下:

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

但由于我不确定您的输入是如何工作的,您可能需要使用

unique([cQ; p],'rows')