收藏 分销(赏)

二维福利叶变换图像处理技术.doc

上传人:a199****6536 文档编号:2670475 上传时间:2024-06-04 格式:DOC 页数:20 大小:1.04MB 下载积分:10 金币
下载 相关 举报
二维福利叶变换图像处理技术.doc_第1页
第1页 / 共20页
二维福利叶变换图像处理技术.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
第一章 基于二维傅里叶变换的图像处理技术 1.1二维傅里叶变化基础 假如以正方形网格采样得到的数字图像用f(x,y)表示,由一维傅里叶变换的定义可以得到f(x,y)的二维傅里叶变换为: 其反变换为: 1.2傅里叶变换的性质 1. 分离性: 2. 平移性 3. 周期性 4. 共轭对称性 5. 旋转性 6. 分配性和比例性 1.3 matlab中二维傅里叶变换的函数以及应用 在MATLAB中,用来实现数字图像傅里叶变换用到的函数主要有fft2函数和fftshift函数。前者用来实现数字信号的二维离散傅里叶变换,后者用来将傅里叶变换的零频率部分移到频谱的中间。 fft2函数的语法格式如下: Y = fft2(X) Y = fft2(X,m,n) fftshift函数的语法格式如下: Y = fftshift(X) Y = fftshift(X,dim) 例:制作64*64 大小的简单黑白二值图像用Matlab 的imread 函数读 取并做二维DFT 变换 代码: clear %创建256*256的二值图像 f = zeros(256,256); f(124:130,117:137) = 1; %原始图像显示 figure(1); imshow(f); title('原始图像'); %傅里叶变换 F = fft2(f); %频谱中心化 F2 = fftshift(abs(F)); %结果显示 figure(2); x=1:256;y=1:256; mesh(x,y,F2(x,y)); colormap(jet); colorbar title('傅立叶变换结果'); 图 1-1 a) 图1-1 b) 结果分析: 从变换结果图1-1 b)可以看出,图像的能量主要集中在某一频率段,如果将系数较小的部分舍去,即可实现图像的压缩。 例:更改DFT 系数为整数,做IDFT 观察图像的变化; %将DFT系数的绝对值四舍五入后作为新的dft系数 F1=round(abs(F)); f2=ifft2(F1); figure(3);imshow(f2); 实验结果: 图1-2 a) 实验结论: 可见图像无法还原到最初。 例:更改小幅值的DFT 系数为0,做IDFT 变化观察图像的变化: %将绝对值小于a的都改为零,在做IDFT变换: %取a=1; F(abs(F)<1)=0; f2=ifft2(F); figure(4);imshow(f2); 实验结果: 图1-3 a) 结果分析: 在执行二维离散傅里叶变换过程中,只取离散傅里叶变换系数大于1的系数,所示的反变换结果如图1-3 c)和原图像1-1 a)比较,通过肉眼观测,很难看出两者的区别,如果将系数小于100的值设为0,反变换得到的结果如图1-3 d)所示,图像的清晰度越来越低,图像质量越来越差。 F(abs(F)<100)=0; f2=ifft2(F); figure(4);imshow(f2); 图1-3 d) 例:选取不同类型(自然景观、人物照片、卡通图片)的实际图片重复上述处理并分析结果 用下面这幅图进行分析: 代码: f=imread('e:/26794054.jpg'); figure(1); imshow(f); F=fft2(f); figure(2); f1=ifft2(F); imshow(f1); 图1-4 结果分析: 可见图像已经发生严重失真。 例:将彩色图像转换为黑白二值图像之后才能进行二维傅里叶变换 这里我们取阈值为0.5 代码: f=imread('e:/26794054.jpg'); f1=im2bw(f,0.5); figure(1); imshow(f1);title('原始图像'); F=fft2(f1); %取F的实部再取整 F1=ceil(real(F)); f2=ifft2(F1); figure(2); imshow(f2); %将DFT系数小于十的全取零 F(abs(F)<10)=0; f3=ifft2(F); figure(3); imshow(f3); 实验结果: 图1-5 a) 图1-5 b) 图1-5 c) 结果分析: 可见如果要压缩彩图,不可能保留其颜色信息,只有将其先转换为黑白二值图像之后才能进行压缩,这样至少图像基本形状信息不会缺失。 第2章 基于离散余弦变换的图像压缩技术 2.1离散余弦变换基础 一维离散余弦变换和其反变换定义如下: 式中 二维离散余弦变换和反变换的公式为: 2.2 Matlab实例操作 1、dct2函数 利用该函数可以实现数字图像的二维离散余弦变换,该函数使用了一个基于FFT的算法,提高了较大矩阵时的处理速度。其语法格式为: B = dct2(A) B = dct2(A,m,n) B = dct2(A,[m n]) 例:对D:\matlab\girl.jpg进行离散余弦变换: 代码: clear all %读入图像并显示 RGB = imread('D:\matlab\girl.jpg'); figure(1); imshow(RGB); title('原始图像') ; %将真彩图像转换为灰度图像 A = rgb2gray(RGB); %实现离散余弦变换 B = dct2(A); %结果显示 figure(2); imshow(log(abs(B)),[ ]), colormap(jet(64)), colorbar title('离散余弦变换结果'); 实验结果: 图2-1 a) 图2-1 b) 图2-1 c) 结果分析: 从图 2-1 b)所示的变化结果及图2-1 c)所示的变化系数可以看出,经过离散余弦变换,图像的能量主要集中在图像2-1 b)的左上角,其余大部分系数接近于0,这说明离散余弦变换也可用于图像的压缩。 2. 、idct2函数 MATLAB 中,可以用函数Idct2实现离散余弦反变换,其语法格式为: B = idct2(A) B = idct2(A,m,n) B = idct2(A,[m n]) 例:对D:\matlab\girl.jpg进行离散余弦变换,在进行反变换之前,将系数小于10的值设为0,再进行反变换 代码: clear all %读入图像并转换为灰度图像 RGB = imread('D:\matlab\girl.jpg'); A = rgb2gray(RGB); %显示图像 figure(1); imshow(A);title('原始图像灰度显示') ; %离散余弦变换并显示结果 B = dct2(A); figure(2); imshow(log(abs(B)),[]), colormap(jet(64)), colorbar title('离散余弦变换结果图像'); %将变换系数中小于10的值设为0 B(abs(B) < 10) = 0; %离散余弦反变换并显示结果 K = idct2(B); figure(3); imshow(K,[0 255]); title('反变换图像'); 实验结果: 图2-2 a) 图2-2 b) 图2-2 c) 结果分析: 在执行离散余弦变换过程中,只取离散余弦变换系数大于10的系数,所示的反变换结果如图2-2 c)和原图像2-2 a)比较,通过肉眼观测,很难看出两者的区别,如果将系数小于50和小于100的值设为0,反变换得到的结果如图2-2 d)和2-2 e)所示,图像的清晰度越来越低,图像质量越来越差。 2-2 d) 2-2 e) 2.3JPEG压缩技术: 原理:1、dctmtx函数 该函数用于计算二维的离散余弦变换矩阵,语法格式如下: D = dctmtx(n);D是返回的n*n的矩阵,D*A是矩阵A的每一列离散余弦变换值,D'*A是矩阵A的每一列的离散余弦变换值,如果A是一个方阵,A的二维离散余弦变换可以用D*A*D'计算。 例:对D:\matlab\girl.jpg进行JPEG压缩: 代码: clear all %读入图像并显示 REG= imread('D:\matlab\girl.jpg'); I=rgb2gray(REG); figure(1); imshow(I); title('原始图像'); %图像数据类型转换为double型 I = im2double(I); D = dctmtx(8); %系数取舍矩阵 mask = [ 1 1 1 1 1 0 0 0 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 ]; % DCT变换 D->P1; [8 8]->x ;D->P2' Bdct = blkproc(I,[8 8],'P1*x*P2',D,D'); % 系数选择 Bch = blkproc(Bdct,[8 8],'P1.*x',mask); % IDCT变换 Bidct = blkproc(Bch,[8 8],'P1*x*P2',D',D); %结果显示 figure(2),imshow(Bidct); title('解压图像'); 实验结果: 2-3 a) 2-3 b) 2-3 c) 结果分析: 如图2-3 c)所示,尽管在反变换过程中只保留了15/64=23.4%的系数,单反变换图像依然有较好的视觉效果,仔细观察图像可以看出,解压图像边缘线条边缘比较模糊,这说明在压缩过程中抛弃了图像的高频成分,因而图像经过DCT后,其低频分量主要集中在左上角,而高频分量集中在右下角。 第三章 基于小波变换的图像压缩 3.1连续小波变换 所有小波是通过对基本小波进行尺度伸缩和位移得到的。基本小波(也称母小波)是一具有特殊性质的实值函数,它是震荡衰减的,而且通常衰减得很快,在数学上满足零均值条件: 而且,其频谱满足条件(容许条件): 即基本小波在频域也具有好的衰减性质。一族小波基函数可以由基本小波函数通过尺度伸缩参数a和位移参数b来产生: 如果函数f(t)属于空间L2(R) ,则的连续小波变换(CWT)定义为: CWT的逆变换为: 3.2离散小波变换 令尺度伸缩参数 为整数,平移参数 从而得到离散的小波函数令尺度伸缩参数,为整数,平移参数,从而得到离散的小波函数: 由此可得离散小波变换为: 在实际应用中,为了使小波变换的计算更加有效,通常构 造的小波函数都具有正交性,即 3.3小波变换函数 dwt2函数用来实现单尺度二维离散小波变换 idwt函数用来实现二维小波单尺度逆变换 wavedec2函数用来实现二维信号的多尺度小波分解 waverec2函数用来实现多尺度二维小波重构 dwtmode函数用于设置离散小波变换的延拓模式,延拓模式表示处理边界问题的不同方法 appcoef2函数用来提取二维信号小波分解的近似系数 detcoef2函数用来提取二维信号小波分解的细节系数 wrcoef2函数用与由二维小波系数重构单支 upcoef2函数用于二维小波系数的直接重构 upwlev2函数用于二维小波分解的单尺度重构 wenergy2函数用于计算二维小波分解的能量 wfilters用于设计小波滤波器 3.4用小波变换实现图像压缩: 小波降噪和压缩函数: wnoise函数用于产生小波的噪声测试数据 wnoisest函数用于估计一维小波系数的标准差 ddencmp函数用于获取降噪或压缩的默认值 wthresh函数用于进行软阈值或硬阈值处理 wdencmp 用于一维或二维小波降噪或压缩 wbmpen函数为一维或二维小波降噪的阈值函数 wdcbm为使用Birgé-Massart策略的一维小波阈值函数 wdcbm2为使用Birgé-Massart策略的二维小波阈值函数 thselect函数用于选择降噪阈值 wthcoef2函数是二维小波降噪和压缩的导向函数 wthrmngr函数用于阈值设置管理 图像压缩(保留低频系数法) 对图像小波分解后,可得到一系列不同分辨率的子图像,表征图像最主要的部分是低频部分,高频部分大部分数据均接近于0。因此,利用小波分解去掉图像的高频部分而仅保留图像的低频部分,是一种最简单的图像数据压缩方法。 例:对D:\matlab\girl.jpg用小波变换进行压缩: 代码: clear all REG=imread('D:\matlab\girl.jpg'); X=rgb2gray(REG); subplot(2,2,1); image(X);colormap(gray(256));axis square; title('原始图像'); disp('原始图像大小'); whos('X'); %对图像小波分解 [c ,l] = wavedec2(X,2,'bior3.7'); %提取第一层的低频和高频系数 cA1 = appcoef2(c,l,'bior3.7',1); cH1 = detcoef2('h',c,l,1); cD1 = detcoef2('d',c,l,1); cV1 = detcoef2('v',c,l,1); %重构第一层系数 A1 = wrcoef2('a',c,l,'bior3.7',1); H1 = wrcoef2('h',c,l,'bior3.7',1); D1 = wrcoef2('d',c,l,'bior3.7',1); V1 = wrcoef2('v',c,l,'bior3.7',1); c1= [A1 H1 ;V1 D1]; %显示第一层频率信息 subplot(2,2,2); image(c1);colormap(gray(256));axis square; title('图像分解信息'); %图像压缩,保留第一层低频信息并对其量化编码 ca1 = wcodemat(cA1,192,'mat',0); subplot(2,2,3); image(ca1);colormap(gray(256));axis square; title ('第1次压缩图像'); disp ('第1次压缩图像的大小为:'); whos('ca1'); %图像压缩,保留第二层低频信息并对其量化编码 ca2 = appcoef2 (c,l,'bior3. 7',2); ca2 = wcodemat (ca2 ,192 , 'mat',0); subplot (2,2,4) ; image (ca2) ;colormap (gray(256)) ;colormap(gray(256));axis square; title ('第2次压缩图像'); disp ('第2次压缩图像的大小为:') ; whos('ca2'); 实验结果: 图3-1 a) 图3-1 b) 结果分析: 从结果可以看出,第一次压缩式提取原始图像中小波分解第一层的低频信息,此时压缩效果较好,压缩比较小(约0.28)。第二次压缩式提取第一层分解低频部分的低频信息,即第二层的的低频部分,其压缩比较大(约0.07),压缩效果从视觉上看还可以。 例:用wdencmp函数对图像D:\matlab\girl.jpg进行压缩: 代码: clear all clc % 装载图像 REG=imread('D:\matlab\girl.jpg'); X=rgb2gray(REG); % 对图像小波分解 n = 2; w = 'sym2'; [c,l] = wavedec2(X,n,w); %全局阈值 [thr,sorh,keepapp]=ddencmp('cmp','wv',X); %压缩处理 对所有高频系数进行阈值化处理 [Xcomp,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,l,w,n,thr,sorh,keepapp); %图像显示 subplot(1,2,1); image(X); colormap(gray(256)); title('原始图像'); subplot(1,2,2); image(Xcomp); colormap(gray(256)); title('压缩后的图像'); %显示有关参数 disp('小波分解系数中值为0的系数个数百分比:'); disp(perf0); disp('压缩后剩余能量百分比:'); disp(perfl2); 实验结果: 图3-2 a) 图3-2 b) 结果分析: 图像经压缩后,压缩效果较好,压缩也比较小约(0.48),能量保留约100%。 第四章 结束语 本文主要描述了各种变换在图像压缩中的处理。 由实验结果可以看出:二维傅里叶、离散余弦变换、小波变换均可实现对图像的压缩处理。其中,傅里叶变换对图像压缩表现最直接,但是只能对二进制图像进行压缩,且对于小值系数的过滤的临界值不好判断。离散余弦变换结果可以看出图像的能量都集中在左上角,所以既可以和傅里叶变换一样对小值系数进行过滤,也可以进行乘矩阵的方式,保留变换结果左上角的系数,所以避免了衡量临界值大小的麻烦。而小波变换保留低频信息是压缩办法中最简单的一种,他不需要经过其他处理即可获得较好的压缩效果。 20 / 20
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服