比如我用小波变换来实现图片压缩,那么压缩后的数据(矩阵)要进行存储,即能够将数据保存下来。
用树形结构来存储矩阵,算法该怎么写?C/C++语言均可。
请各位大虾指点,能给出程序代码就更感激了。
下面是matlab的小波变换程序,然后就是要对数据存储了。
需要说明的是用matlab与VC的接口连接,实现将数据通过VC编程来实现存储。
***********************************************************
clear
load lena;
subplot(221);
image(I);%显示图像
colormap(gray)
title('原始图像');
axis square
disp('压缩前图像X的大小');
whos('I');
[c,s]=wavedec2(I,2,'bior3.7');%对图像用小波进行层分解
cal=appcoef2(c,s,'bior3.7',1);%提取小波分解结构中第一层的低频系数和高频系数
ch1=detcoef2('h',c,s,1);%水平方向
cv1=detcoef2('v',c,s,1);%垂直方向
cd1=detcoef2('d',c,s,1);%对角方向
a1=wrcoef2('a',c,s,'bior3.7',1);
h1=wrcoef2('h',c,s,'bior3.7',1);
v1=wrcoef2('v',c,s,'bior3.7',1);
d1=wrcoef2('d',c,s,'bior3.7',1);
%各频率成分重构
c1=[a1,h1;v1,d1];
subplot(222);
image(c1);%显示分频信息
axis square;
title('分解后低频和高频信息');
%进行图像压缩
%保留小波分解第一层低频信息
%首先对第一层信息进行量化编码
ca1=appcoef2(c,s,'bior3.7',1);
ca1=wcodemat(ca1,440,'mat',0);
ca1=0.5*ca1;
subplot(223);
image(ca1);
%改变图像高度并显示
colormap(gray);
axis square;
title('第一次压缩图像');
disp('第一次压缩图像的大小为:');
whos('cal');
ca2=appcoef2(c,s,'bior3.7',2);
%保留小波分解第二层低频信息进行压缩
ca2=wcodemat(ca2,440,'mat',0);
%首先对第二层信息进行量化编码
ca2=0.25*ca2;
%改变图像高度并显示
subplot(224);
image(ca2);
colormap(gray);
axis square;
title('第二次压缩图像');
disp('第二次压缩图像的大小为:');
whos('ca2');
7 个解决方案
#1
up
#2
藐视matlab不懂,帮顶吧……
#3
树形结构来存储矩阵?? 貌似不是个很好的想法..帮你顶
#4
UP
#5
UP
UP
UP
#6
帮顶吧。。
#7
压缩后的矩阵是稀疏矩阵码? 对于稀疏矩阵,可考虑十字链表~
#1
up
#2
藐视matlab不懂,帮顶吧……
#3
树形结构来存储矩阵?? 貌似不是个很好的想法..帮你顶
#4
UP
#5
UP
UP
UP
#6
帮顶吧。。
#7
压缩后的矩阵是稀疏矩阵码? 对于稀疏矩阵,可考虑十字链表~