当前位置:文档之家› 傅里叶变换图像压缩

傅里叶变换图像压缩

傅里叶变换图像压缩————————————————————————————————作者:————————————————————————————————日期:DSP实验进度汇报组员:汪张扬、任艳波、陈雪松、谢聪、沈旭任务分配:汪张扬由于考G,上周没有任务,沈旭负责自制二值图像的处理,陈雪松和谢聪负责其他图片的处理,任艳波负责搜集图像压缩评价的相关材料以下为简要概括:读入图像进行傅里叶变换和压缩原始程序:a=imread('d:\1.jpg');b=figure;imshow(a);title('原始图像');F=fft2(a);F_mm=abs(F);figure;imshow(F);title('原始幅度谱');Fshift=fftshift(F);F_m=abs(Fshift);figure;imshow(F_m);title('幅度谱');F_p=angle(Fshift);figure;imshow(F_p);title('相位谱');T=@fft2;B1=blkproc(a,[8 8],T);%将图像分块为8×8矩阵进行处理figure;imshow(a);title('原始图像');mask=[100 000 000 10 0 0 0 0 000 1 000 0 000 0 1 000 0000 0 00000 000 0 1 0 00 0 0 000 1 000 0 0 00 01];%与该矩阵相乘去掉中间行,即高频部分B2=blkproc(B1,[88],'P1*x',mask);fun=@ifft2;F3=blkproc(B2,[88],fun);F=mat2gray(F3);figure;imshow(F);title('压缩87.5%的图像');刚开始的原始图像:傅里叶变换后的原始幅度谱: 取高频点后的图像:原始图像原始幅度谱取对数后的频谱图:图像进行取整后的i =imrea d('d:\1.jpg'); fi gure(1); imsho w(i ); c olo rbar; j=fft 2(i); k=fftshift(j ); h =floor(k);n =ifft2(h)/255;figure(3);m=imr esize(n,2);imsho w(m,[]);colorba r压缩87.5%的图像取小幅值为零:i=im re ad ('d:\1.j pg'); fig ur e(1); i msh ow(i); c olorbar; j=fft 2(i);k=fftshift(j);k(abs(k)<1)=0;g=ifft2(k )/255;figure(2);h=imresize(g,2);imsh ow(h );co lo rbar结论:二维黑白图像的压缩主要有三种方式:取整,让小幅值为零,或者利用矩阵的变换只取某些变换后的值进行重建,如矩阵的左上角为低频部分,取它即可。

取整重建将黑色部分变白了,小幅值变换将白色部分变黑了。

-0.8-0.6-0.4-0.200.20.40.60.8 00.10.20.30.40.50.60.70.80.91二、实验前后的结构比较(一)、自然景观(1)、原图:(2)、更改DFT系数为整数,做IDFT 观察图像的变化更改DFT 系数为整数figure2更改后时域与原时域的误差为0(3)、更改小幅值的DFT 系数为0,做IDFT变化观察图像的变化更改小幅度频谱系数为0 figure3更改后时域与原时域的误差为1471.6806242515此处取频谱虚实部中最大值的0.0005 作为取零的阈值。

(二)、人物照片(1)、原图(2)、更改DFT 系数为整数,做IDFT 观察图像的变化更改DFT 系数为整数figure2更改后时域与原时域的误差为0(3)、更改小幅值的DFT系数为0,做IDFT 变化观察图像的变化更改小幅度频谱系数为0 figure3更改后时域与原时域的误差为1349.14370621138此处取频谱虚实部中最大值的0.0005作为取零的阈值。

(三)、卡通图片(1)、原图(2)更改DFT系数为整数,做IDFT观察图像的变化更改DFT系数为整数:figure2更改后时域与原时域的误差为0(3)、更改小幅值的DFT 系数为0,做IDFT变化观察图像的变化更改小幅度频谱系数为0 figure3更改后时域与原时域的误差为2546.此处取频谱虚实部中最大值的0.0005 作为取零的阈值。

三、实验分析与说明(1)、实验中图片频谱中的小幅度部分需要探讨,此处取的是最大值的0.0005倍。

(2)、实验中原图取自jpg格式的rgb彩色图。

(3)、实验的结果图也已jpg格式存储(4)、jpg格式本身就是采用了频谱取整取零技术。

四、实验结论(1)、实验中小幅度的阈值不能取得太大,否则图片会失真。

本次试验去的是0.0005倍,出现较明显的失真;实验中发现取为0.0001,就几乎看不出失真。

(2)、关于频谱取整,我想应该是要将4字节的double变成2字节的int,可以节省约50%的存储空间。

而且从本次实验可以看出频谱取整几乎不失真。

(3)、关于频谱小幅度取零,这个阈值需要根据具体图片来确定,或者寻找自适应的阈值;以为它对图片的失真度和压缩率也起主要作用。

阈值太小,越不容易失真,但要压缩率也越小;阈值太大,越容易失真,但压缩率也越大。

(4)、自然景观、人物照片、卡通图片这三类对同意阈值的敏感度不同;下附实验代码:下面是对对片的处理的全部代码,图片名K1.jpg为待处理的图片;%2)更改DFT 系数为整数,做IDFT观察图像的变化;%3)更改小幅值的DFT系数为0,做IDFT 变化观察图像的变化。

%4)选取不同类型(自然景观、人物照片、卡通图片)的实际图片重复上述处理并分析结果;close all;format long gA3=imread('K1.jpg');%原图gA3=rgb2gray(A3);%原灰度图disp('原图figure1 ')figure;imshow(gA3);%更改DFT系数为整数f_gA3=fft2(gA3);%频谱int_f_gA3=int32(f_gA3);%频谱取整int_gA3=uint8(ifft2(int_f_gA3));%反变换figure;imshow(int_gA3);thltaA3=double(int_gA3-gA3);nzero=numel(find(thltaA3));disp('更改DFT系数为整数figure2 ')disp('更改后时域与原时域的误差为')if nzero>1disp(norm(thltaA3));elsedisp('0');end%更改小幅值的DFT系数为0maxA3real=max(max(real(f_gA3)));maxA3imag=max(max(imag(f_gA3)));maxA3=maxA3real;if maxA3<maxA3imagmaxA3=maxA3imag;endz_f_gA3=f_gA3;form=1:size(f_gA3,1)forn=1:size(f_gA3,2)if abs(f_gA3(m,n))<maxA3*0.0005z_f_gA3(m,n) =0;endendendz_gA3=uint8(ifft2(z_f_gA3));figure;imshow(z_gA3);%更改小幅度频谱系数为0后的图像thltaA3_z=double(z_gA3-gA3);nzero_z=numel(find(thltaA3_z));disp('更改小幅度频谱系数为0 figure3 ')disp('更改后时域与原时域的误差为')if nzero_z>1disp(norm(thltaA3_z));elsedisp('0');endformat short搜集有关评价压缩图像的标准的资料及评价的算法实现;学习Matlab中与图像处理有关的常用函数的使用图像压缩的主要指标1、编码效率:包括图象压缩比(CR)、每象素所用的比特数(bpp)、每秒所需的传输比特数(bps)等;其中,CR=原始图像大小/压缩后图像大小。

设:n1和n2是在两个表达相同信息(图片)的数据集中,所携带的单位信息量。

压缩率(压缩比):CR = n1/ n2ﻩﻩ其中,n1是压缩前的数据量,n2是压缩后的数据量相对数据冗余:RD = 1–1/CR2.重建图象质量,包括客观度量和主观度量。

(1) 客观度量:即图象的逼真度,可考虑为原图象与重建图象的差值。

如果把压缩后图像表示为原图像和噪声的叠加,即用f(x,y)表示原图像,g(x,y)表示压缩后图像,e(x,y)表示噪声,则可有f(x,y)- g(x,y)=e(x,y)。

其中x取值为0--M-1之间的整数,y取值为0--N-1之间的整数。

均方误差:MSE={}[]{}222),(),(),(yxgyxfEyxee-=E=σ=[]211),(),(1∑∑-=-=-MxNyyxgyxfMNMSE值越小,保真度越好。

峰值信噪比PSNR=⎪⎪⎭⎫⎝⎛22255log10eσ信噪比)(SNR=),(),(22yxeyxfx y x y∑∑∑∑=∑∑∑∑-x yx yyxgyxfyxf22)],(),([),(均方根信噪比越大,保真度越好。

ﻩ(2)主观度量:即通过人们的主观测试来评价系统的质量,包括二元判决(即“接受”和“不可接受”)、主观PSNR、平均判分、等偏爱度曲线、多维计分(MDS)等。

MATLAB中求均值、方差的函数实现:1、Matlab中使用mean2(H)来求矩阵H中所有元素的均值。

如在命令行输入:A-average=mean2(A-gray)即可得灰度图各像素点均值。

2、Matlab中提供标准差计算函数std()和std2(),两个函数的使用方法如下:S=std(X)S=std2(X)S=std(X,flag,dim)我们可以通过std2()函数来计算二维图像中各点像素的标准差。

如在命令行输入std2(A-gray)即可求得灰度图各像素点的标准差。

3、Matlab中提供了方差计算函数var(),可以方便地计算矩阵的方差,函数的使用方法如下:在命令行中输入var(double(A_gray(:)))即可求得灰度图各像素点的方差。

4、信噪比SNRp1=mean2(f*f)p2=mean2(e*e)SNR=p1/p2我们的下一步计划:(1)、探究取整,即变为1的倍数,变为向k的倍数取整;(2)、探究小幅度的阈值的规律;(3)、探究不同类图片的差别,和同一类图片的共性;(4)、可已考虑从计算机原理上来要压缩数据,如系数矩阵的压缩存储等;(5)、其他频谱处理技术;(6)、其他压缩技术,不仅是频域压缩,而且可以了解一下时域压缩;(7)、滤波器对特殊图片的处理;(8)、自然景观背景不能模糊,所以可能阈值不能取太高;人物照片关注脸部特征,所以背景可以适当模糊,阈值可以取得相对较大一点。

相关主题