jpeg2k2im.m

%jpeg2k2im源程序
function x=jpeg2k2im(y)
%解码一个im2jpeg压缩图像
%x=jpeg2k2im(y)解码压缩图像y,重构初始图像x的一个近似值。
%y是通过im2jpeg2k返回编码结构

%也看im2jpeg2k

error(nargchk(1,1,nargin));%检查输入参数

%得到解码参数:尺度、量化向量、步长表大小、零运行编码、数据结束编码、小波簿记数组和步长表
n=double(y.n);
q=double(y.q)/100;
runs=double(y.runs);
rlen=length(runs);
zrc=-double(y.zrc);
eoc=zrc-1;
s=double(y.s);
s=reshape(s,n+2,2);

%计算小波变换大小
c1=prod(s(1,:));
for i=2:n+1
    c1=c1+3*prod(s(i,:));
end

%通过零运行编码执行霍夫曼编码
r=huff2mat(y.huffman);

c=[];zi=find(r==zrc);i=1;
for j=1:length(zi)
    c=[c r(i:zi(j)-1) zeros(1,runs(r(zi(j)+1)))];
    i=zi(j)+2;
end

zi=find(r==eoc);%撤消终止零运行或最后非零运行
if length(zi)==1
    c=[c r(i:zi-1)];
    c=[c zeros(1,c1-length(c))];
else
    c=[c r(i:end)];
end

%非标准化系数
c=c+(c>0)-(c<0);
for k=1:n
    qi=3*k-2;
    c=wavepaste('h',c,s,k,wavecopy('h',c,s,k)*q(qi));
    c=wavepaste('v',c,s,k,wavecopy('v',c,s,k)*q(qi+1));
    c=wavepaste('d',c,s,k,wavecopy('d',c,s,k)*q(qi+2));
end
c=wavepaste('a',c,s,k,wavecopy('a',c,s,k)*q(qi+3));
%计算逆小波变换和水平平移
x=waveback(c,s,'jpeg9.7',n);
x=uint8(x+128);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值