导航:首页 > 文件处理 > matlab实现图像压缩

matlab实现图像压缩

发布时间:2022-02-02 01:00:08

㈠ matlab中图像压缩技术是怎么实现的

基于小波分析的图像压缩方法很多 , 有小波包最好基方法 、小波域纹理模型方法 、变换零树压缩 、小波变换向量量化压缩等等,不过具体理论都是差不多的,区别是算法方式不同,有兴趣的可以去matlab的网站去看看 http://www.ilove matlab .cn 一个图像作小波分解后 , 可得到一系列不同分辨率的子图像 ,不同分辨率的子图像对应的频率是 不相同的 。高分辨率 ( 即高频) 子图像上大部分点的数值都接近于 0 , 越是高频这种现象越明显 。对一 个图像来说 ,表现一个图像最主要的部分是低频部分 ,所以一个最简单的压缩方法是利用小波分解 ,去 掉图像的高频部分而只保留低频部分 。 下面具体介绍利用 MA TLAB[ 2 ] 中二维小波分析一个图像 ( 即一个二维信号 , 设文件名为 wbarb. mat) 进行图像压缩的实例 。图像压缩可按如下程序进行处理 。 程序清单 : clear %清除 MA TLAB 工作环境中现有的变量 load wbarb ; %装入图像 %显示图像 subplot ( 221) ;image ( X) ; colormap ( map ) title ( ’原始图像’ ;) axis square disp ( ’压缩前图像 X 的大小 : ’ ;) Whos ( ’’X ) %= = = = = = = = = = = = = = = = = = %对图像用 bior3. 7 小波进行 2 层小波分解 [ c ,s ] = wavedec2 ( X ,2 ,’bior3. 7’ ;) %对图像用 bior3. 7 小波进行 2 层小波分解 [ c ,s ] = wavedec2 ( X ,2 ,’ bior3. 7’ ; ) %提取小波分解结构中第 1 层的低频系数和高 频系数 cal = appcoef2 ( c ,s ,’ bior3. 7’ ,l) ; ch1 = detcoef2 ( ’h' ,c ,s ,1) ; %水平方向 cv1 = detcoef2 ( ’V ’,c ,8 ,1) ; %垂直方向 cdl = detcoef2 ('d',C ,S ,1) ; %斜线方向 %分别对各频率成份进行重构 al = wrcoef2 ( 'a',c ,s ,’bior3. 7’ ,1) ; h1 = wrcoef2 ( ’h’,c ,s ,’bior3. 7’ ,1) ; v1 = wrcoef2 ( ’v’,c ,s ,’bior3. 7’ ,1) ; dl = wrcoef2 ( ’d’,c ,s ,’bior3. 7’ ,1) ; c1 = [ al ,hl ,v1 ,d1”; %显示分解后各频率成份的信息 subplot ( 222) ; image ( c1) ; axis squaretitle ( ’分解后低频和高频信息’ ;) %= = = = = = = = = = = = = = = = = = = %下面进行图像压缩处理 %保留小波分解第一层低频信息 , 进行图像的压缩 %第 1 层的低频信息即为 cal , 显示第 1 层的低频信息 %首先对第 1 层信息进行量化编码它处理即可获得较好的压缩效果 。在上面的例 子中,我们还可以只提取小波分解第 3 、4 … 层的低频信息 ,从理论上说 ,我们可以获得任意压缩比的压 缩图像 。由此可以看出 , 小波分析用于图像压缩具有明显的优点 。 在利用二维小波变换进行图像压缩时需要说明的是 : 小波变换为图像从空间域交换到时间域提供 了一种非常有效的方法 , 它的作用与以前在图像压缩中所用到的离散余弦变换 ( DCT) 、傅里叶变换等 的作用类似 。但是 ,要很好地进行图像的压缩 ,需要综合地利用多种其它技术 , 特别是数据编码与解码 算法等 ,所以利用小波分析进行图像压缩往往是借助小波分析和许多其它相关技术共同完成的 。

㈡ 图像压缩 MATLAB实现 如何解压缩一个被压缩过的图像 急急急

法对图像进行压缩,得到一组压缩编码,然后解码这组编码,得到一幅解压缩图像.对解码图像与原始图像求差值,得到一差值图像,然后对该差值图像进行适当的编码.对差值图像的编码与初级编码共同构成对原始图像的编码.这种方法需要选择合适的初级编码方法与差值编码方法,使得这两者相结合,可以得到一种综合性能较好的编码方法。
其定义如图。
%%%%%%%%%%%%%%

clear
tic
%Image1=imread('pic\cameraman.tif');
xianshi;
number=input(' input the number:');
Image1=suoxiao('pic\cameraman.tif',number);
[imagem imagen]=size(Image1);
Sr=4;Sd=8;
Rnum=(imagem/Sr)*(imagen/Sr);
Dnum=(imagem/Sd)*(imagen/Sd);
Image2=zeros(Dnum,Sr,Sr);
Image2=blkproc(Image1,[Sd/Sr,Sd/Sr],'mean(mean(x))');
%压缩image1为原来1/2
% there are no eight tranformation for simpleness
RBlocks=zeros(Rnum,Sr,Sr);
DBlocks=zeros(Dnum,Sd,Sd);
DBlocksRece=zeros(Dnum*8,Sr,Sr);
%%取R块,K记标号----------------------------------
for i=1:imagem/Sr
for j=1:imagen/Sr
k=(i-1)*imagen/Sr+j;
RBlocks(k,:,:)=Image1((i-1)*Sr+1:i*Sr,(j-1)*Sr+1:j*Sr);

end
end
%取R块,K记标号----------------------------------
for i=1:imagem/Sd
for j=1:imagen/Sd
k=(i-1)*imagen/Sd+j;
m=Sr;n=Sr;
DBlocksRece(k,:,:)=Image2((i-1)*Sr+1:i*Sr,(j-1)*Sr+1:j*Sr);
DBlocksRece(k+Dnum,:,:)=DBlocksRece(k,m:-1:1,:); % 行上下翻转===(x轴对称)
DBlocksRece(k+2*Dnum,:,:)=DBlocksRece(k,:,n:-1:1); % 列左右翻转 ==== y轴对称
DBlocksRece(k+3*Dnum,:,:)=DBlocksRece(k,m:-1:1,n:-1:1); % 先行翻,再列翻 旋转180度
DBlocksRece(k+4*Dnum,:,:)=reshape(DBlocksRece(k,:,:),Sr,Sr)'; % 关于y=-x对称
A=reshape( DBlocksRece(k+3*Dnum,:,:),Sr,Sr)';
DBlocksRece(k+5*Dnum,:,:)=A(:,n:-1:1); % 关于y=x对称
DBlocksRece(k+6*Dnum,:,:)=imrotate(reshape(DBlocksRece(k,:,:),Sr,Sr),90); % 逆时针旋转90度
DBlocksRece(k+7*Dnum,:,:)=imrotate(reshape(DBlocksRece(k,:,:),Sr,Sr),270); % 逆时针旋转270度

DBlocks(k,:,:)=Image1((i-1)*Sd+1:i*Sd,(j-1)*Sd+1:j*Sd);
end
end
RandDbest=zeros(Rnum,1)+256^3;
RandDbests=zeros(Rnum,1);
RandDbesto=zeros(Rnum,1);
RandDbestj=zeros(Rnum,1);
for i=1:Rnum
x=reshape(RBlocks(i,:,:),Sr*Sr,1);
meanx=mean(x);
for j=1:Dnum*8
y=reshape(DBlocksRece(j,:,:),Sr*Sr,1);
meany=mean(y);
s=(x-meanx)'*(y-meany)/((y-meany)'*(y-meany));%计算s
o=(meanx-s*meany);%计算o
c=(x-s*y-o)'*(x-s*y-o);%距离
if (RandDbest(i)>c)&(abs(s)<1)
RandDbest(i)=c;
RandDbests(i)=s;
RandDbesto(i)=o;
RandDbestj(i)=j;%可以找到对应变换和D块
end
end
end
%iteration limit
toc
tic
m=8;%解码迭代次数
e=mean(mean(Image1));
Image3=e*ones(imagem,imagen);%解码初始图象
for L=1:m
Image4=blkproc(Image3,[Sd/Sr,Sd/Sr],'mean(mean(x))');

for i=1:imagem/Sr
for j=1:imagen/Sr
m=Sr;n=Sr;
k=(i-1)*imagen/Sr+j;
l=RandDbestj(k);
k1=mod(l-1,Dnum)+1;%第几个D
l1=(l-k1)/Dnum+1;%变换号
%R对应D在Image4的起始点
j1=mod(k1-1,imagen/Sd)+1;
i1=(k1-j1)/(imagen/Sd)+1;
%变换------------------------------------------------------------------------
DBlocksRece(k1,:,:)=Image4((i1-1)*Sr+1:i1*Sr,(j1-1)*Sr+1:j1*Sr);
switch l1-1
case 0
DBlocksRece(l,:,:)=Image4((i1-1)*Sr+1:i1*Sr,(j1-1)*Sr+1:j1*Sr);
case 1
DBlocksRece(l,:,:)=DBlocksRece(k1,m:-1:1,:);
case 2
DBlocksRece(l,:,:)=DBlocksRece(k1,:,n:-1:1);
case 3
DBlocksRece(l,:,:)=DBlocksRece(k1,m:-1:1,n:-1:1);
case 4
DBlocksRece(l,:,:)=reshape(DBlocksRece(k1,:,:),Sr,Sr)';
case 5
DBlocksRece(k1+3*Dnum,:,:)=DBlocksRece(k1,m:-1:1,n:-1:1);
A=reshape( DBlocksRece(k1+3*Dnum,:,:),Sr,Sr)';
DBlocksRece(l,:,:)=A(:,n:-1:1);
case 6
DBlocksRece(l,:,:)=imrotate(reshape(DBlocksRece(k1,:,:),Sr,Sr),90);
case 7
DBlocksRece(l,:,:)=imrotate(reshape(DBlocksRece(k1,:,:),Sr,Sr),270);
end
%变换结束--------------------------------------------------------------------
RBlocks(k,:,:)=RandDbests(k)*DBlocksRece(l,:,:)+RandDbesto(k);
%生成R---------------------------
Image3((i-1)*Sr+1:i*Sr,(j-1)*Sr+1:j*Sr)=reshape(RBlocks(k,:,:),Sr,Sr);%更新迭代图象
end
end
wucha=double(Image1)-Image3;%误差图

Ps1(L)=20*log10(255/(sqrt(mean(mean(wucha.^2)))))
PSNR=psnr(wucha)
figure
imshow(uint8(Image3))
end
toc
figure
wucha=uint8(wucha);
imshow(wucha)
figure
imshow(uint8(Image1)),title('原图');
save('sa.mat')
fangtu(wucha);%%%%分形主函数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
子函数:1:
function b=suoxiao(filename,bili)
a=imread(filename);
a=double(a);
[m,n]=size(a);
i=1;
while i=m/bili
j=1;
while j=n/bili
k=mean(mean(a(bili*(i-1)+1:bili*(i-1)+bili,bili*(j-1)+1:bili*(j-1)+bili)));
b(i,j)=k;
j=j+1;
end
i=i+1;
end
%b=uint8(b);
size(b)
%imshow(b)
子函数2:
%clc
function fangtu(a)
J=a;
%计算灰度图象的直方图数据,a为如象数组
L=256; %灰度级
Ps = zeros(L,1); %统计直方图结果数据
nk=zeros(L,1);
[row,col]=size(a);
n=row*col; %总像素个数
for i = 1:row
for j = 1:col
num = double(a(i,j))+1; %获取像素点灰度级
nk(num) = nk(num)+1; %统计nk
end
end
%计算直方图概率估计
for i=1:L
Ps(i)=nk(i)/n;
end
figure;
subplot(3,1,1);imshow(J),title('误差图');
subplot(3,1,2),plot(nk),title('直方图(nk)');
subplot(3,1,3),plot(Ps),title('直方图(Ps)');
子函数3:
function PSNR=psnr(a)
[m,n]=size(a);
a=uint8(a);
a=double(a);
imagesize=m*n;
MSE=sum(dot(a,a))/ imagesize;
PSNR=10*log10(255^2/MSE);
%%%%%%%%%%%%%%%%%%%%%%
说明:
1、因为本程序时间长,FX中先选择图片的大小
2、编码与解码
3、做误差图和只方图
4:画出每次迭代的解码图象

㈢ 如何用matlab压缩图像

https://blog.csdn.net/wulafly/article/details/53244456,
我想你问的类似于这个

㈣ 常用的matlab图像压缩有哪些

常用的matlab图像压缩有哪些
法对图像进行压缩,得到一组压缩编码,然后解码这组编码,得到一幅解压缩图像.对解码图像与原始图像求差值,得到一差值图像,然后对该差值图像进行适当的编码.对差值图像的编码与初级编码共同构成对原始图像的编码.

㈤ matlab实现lzw图像压缩

附件中是sift的matlab实现代码,在matlab中直接点击运行do_demo_3.m即可实现图像匹配do_demo_1.m可以显示sift特征点具

㈥ 如何用MATLAB进行图像压缩

I
=
imread('cameraman.tif');
%
输入图像
I
=
im2double(I);
%
数据类型转换
T
=
dctmtx(8);
%
计算二维离散DCT矩阵
dct
=
@(x)T
*
x
*
T';
%
设置函数句柄
B
=
blkproc(I,[8
8],dct);
%
图像块处理
mask
=
[1
1
1
1
0
0
0
0
%
掩膜
1
1
1
0
0
0
0
0
1
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0];
B2
=
blkproc(B,[8
8],@(x)mask.*
x);
%
图像块处理
invdct
=
@(x)T'
*
x
*
T;
%
设置函数句柄
I2
=
blkproc(B2,[8
8],invdct);
%
图像块处理
imshow(I),
figure,
imshow(I2)
%
显示原始图像和压缩重构图像

㈦ MATLAB基础问题图像压缩

%1输入你(你)的脸型图片
%2切割成512*512像素
%3每4*4方块取像素值的平均值
%A.4*4方块的像素值均以此平均值代替
%B.4*4方块的像素值变成一个像素值以此平均值代替
%c.4*4方块的像素值变成一个像素值以此中间值代替
I=imread('me.jpg');
I=rgb2gray(I);
figure;imshow(I);title('原图');

I1=double(I(1:512,1:512));
I2=zeros(256,256);
I3=zeros(256,256);
fori=1:2:511
forj=1:2:511
P=[I1(i,j)I1(i+1,j)I1(i,j+1)I1(i+1,j+1)];
avg=mean(P);
med=median(P);

I1(i,j)=avg;
I1(i+1,j)=avg;
I1(i,j+1)=avg;
I1(i+1,j+1)=avg;

I2((i+1)/2,(j+1)/2)=avg;
I3((i+1)/2,(j+1)/2)=med;
end
end
figure;imshow(uint8(I1));title('4像素平均');
figure;imshow(uint8(I2));title('平均值缩小');
figure;imshow(uint8(I3));title('中值缩小');

㈧ 基于小波变换的图像压缩方法(求个程序啊!用matlab实现图片无损压缩,一种算法即可)

clear all
Y=imread('5.PNG');
[X,map]=gray2ind(Y,256);
subplot(1,2,1);
image(X);
colormap(map);
title('原始图像');

%采用默认的全局阈值
[thr,sorh,keepapp,crit]=ddencmp('cmp','wp',X);
%图像进行压缩
Xc=wpdencmp(X,sorh,3,'bior3.1',crit,thr,keepapp);

%显示压缩结果
subplot(1,2,2);
image(Xc);
colormap(map);
title('全局阈值压缩图像');

㈨ matlab中如何求图像的压缩比 (代码)

I为压缩前的图像数据,I1为压缩后的图像数据。
[m1 n1]=size(I1);
[m n]=size(I);
t=m1*n1/(m*n);

那把你要求的压缩比公式写一下吧

㈩ 谁会用matlab实现小波变换对图片的压缩处理

subplot(1,2,1);
imshow(I);
title('原始图像');
subplot(1,2,2)
imshow(I2);
title('压缩图像');

阅读全文

与matlab实现图像压缩相关的资料

热点内容
裘锡圭pdf 浏览:726
android模拟器调试 浏览:135
sap命令大全 浏览:296
mysql导出数据命令 浏览:954
文件夹隐藏了出不来 浏览:562
电信网上大学源码 浏览:204
rr轮转调度算法 浏览:253
我的世界无法登入服务器怎么办 浏览:148
文件加密授权特定隐藏访问控制 浏览:801
程序员剑灵官网 浏览:516
php调用static方法 浏览:934
天正命令版 浏览:87
聚合支付加密币 浏览:313
蜜源app是什么时候创立的 浏览:707
计算机专业学51单片机 浏览:212
程序员不接受反驳 浏览:299
微软自带的压缩软件 浏览:290
中国玩家在日本服务器做什么 浏览:52
12864和单片机 浏览:899
25匹空调压缩机 浏览:650