2015-05-19 79 views
1

我执行JPEG压缩这个代码,但我得到的错误huffmandict错误符号和概率向量必须具有相同的长度

???使用错误==> huffmandict在97 符号和概率向量必须具有相同的长度

这是代码,请大家帮忙:

function y = mat2huff(x) 
y.size = uint32(size(x)); 
x = round(double(x)); 
x = unique(x) 
xmin = min(x(:)); 
xmax = max(x(:)); 
pmin = double(int16(xmin)); 
pmin = uint16(pmin+32768); 
y.min = pmin; 
x = x(:)'; 

h = histc(x, xmin:xmax); 
if max(h) > 65535 
    h = 65535 * h/max(h); 
end 
[map , w] = huffmandict(x,h); 
hx = map(x(:) - xmin + 1);   % Map image 
hx = char(hx)';      % Convert to char array 
hx = hx(:)'; 
hx(hx == ' ') = [ ];     % Remove blanks 
ysize = ceil(length(hx)/16);  % Compute encoded size 
hx16 = repmat('0', 1, ysize * 16); % Pre-allocate modulo-16 vector 
hx16(1:length(hx)) = hx;    % Make hx modulo-16 in length 
hx16 = reshape(hx16, 16, ysize);  % Reshape to 16-character words 
hx16 = hx16' - '0';     % Convert binary string to decimal 
twos = pow2(15 : - 1 : 0); 
y.code = uint16(sum(hx16 .* twos(ones(ysize ,1), :), 2))'; 
+0

是'大小(x)的大小==(H)'? –

+0

使用[MATLAB的调试器](http://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html#brqxeeu-177)遍历代码并检查数据的大小。 – excaza

+0

这是问题,它们不是平等的,如果它们不相等,我该如何调用这个函数! – user3818372

回答

0

为了确保您的通话histc也算x量每独特x值值称其为

h=histc(x,linspace(xmin,xmax,numel(unique(x(:)))); 

否则,如果你是RIMAGE二进制和你唯一的值是0255histc将返回一个size(h)=256尺寸数组与许多零,因为xmin:xmax0:255=[0 1 2 3 ... 254 255]

+0

它的工作,但现在我得到的错误: ???错误使用==> huffmandict at 91 输入符号的概率不能大于1 – user3818372

+0

请阅读函数文档并理解算法!你想要的概率,所以你需要正常化h! 'H = H /总和(H)'。 –

+0

好的我会..谢谢你:)) – user3818372

相关问题