基于二维福利叶变换的图像处理技术.docx
- 文档编号:25095501
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:26
- 大小:232.48KB
基于二维福利叶变换的图像处理技术.docx
《基于二维福利叶变换的图像处理技术.docx》由会员分享,可在线阅读,更多相关《基于二维福利叶变换的图像处理技术.docx(26页珍藏版)》请在冰豆网上搜索。
基于二维福利叶变换的图像处理技术
第1章基于二维傅里叶变换的图像处理技术
1.1二维傅里叶变化基础
假如以正方形网格采样得到的数字图像用f(x,y)表示,由一维傅里叶变换的定义可以得到f(x,y)的二维傅里叶变换为:
其反变换为:
1.2傅里叶变换的性质
1.分离性:
2.平移性
3.周期性
4.共轭对称性
5.旋转性
6.分配性和比例性
1.3matlab中二维傅里叶变换的函数以及应用
在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-1a)
图1-1b)
结果分析:
从变换结果图1-1b)可以看出,图像的能量主要集中在某一频率段,如果将系数较小的部分舍去,即可实现图像的压缩。
例:
更改DFT系数为整数,做IDFT观察图像的变化;
%将DFT系数的绝对值四舍五入后作为新的dft系数
F1=round(abs(F));
f2=ifft2(F1);
figure(3);imshow(f2);
实验结果:
图1-2a)
实验结论:
可见图像无法还原到最初。
例:
更改小幅值的DFT系数为0,做IDFT变化观察图像的变化:
%将绝对值小于a的都改为零,在做IDFT变换:
%取a=1;
F(abs(F)<1)=0;
f2=ifft2(F);
figure(4);imshow(f2);
实验结果:
图1-3a)
结果分析:
在执行二维离散傅里叶变换过程中,只取离散傅里叶变换系数大于1的系数,所示的反变换结果如图1-3c)和原图像1-1a)比较,通过肉眼观测,很难看出两者的区别,如果将系数小于100的值设为0,反变换得到的结果如图1-3d)所示,图像的清晰度越来越低,图像质量越来越差。
F(abs(F)<100)=0;
f2=ifft2(F);
figure(4);imshow(f2);
图1-3d)
例:
选取不同类型(自然景观、人物照片、卡通图片)的实际图片重复上述处理并分析结果
用下面这幅图进行分析:
代码:
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-5a)
图1-5b)图1-5c)
结果分析:
可见如果要压缩彩图,不可能保留其颜色信息,只有将其先转换为黑白二值图像之后才能进行压缩,这样至少图像基本形状信息不会缺失。
第2章基于离散余弦变换的图像压缩技术
2.1离散余弦变换基础
一维离散余弦变换和其反变换定义如下:
式中
二维离散余弦变换和反变换的公式为:
2.2Matlab实例操作
1、dct2函数
利用该函数可以实现数字图像的二维离散余弦变换,该函数使用了一个基于FFT的算法,提高了较大矩阵时的处理速度。
其语法格式为:
B=dct2(A)
B=dct2(A,m,n)
B=dct2(A,[mn])
例:
对D:
\matlab\girl.jpg进行离散余弦变换:
代码:
clearall
%读入图像并显示
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-1a)图2-1b)
图2-1c)
结果分析:
从图2-1b)所示的变化结果及图2-1c)所示的变化系数可以看出,经过离散余弦变换,图像的能量主要集中在图像2-1b)的左上角,其余大部分系数接近于0,这说明离散余弦变换也可用于图像的压缩。
2.、idct2函数
MATLAB中,可以用函数Idct2实现离散余弦反变换,其语法格式为:
B=idct2(A)
B=idct2(A,m,n)
B=idct2(A,[mn])
例:
对D:
\matlab\girl.jpg进行离散余弦变换,在进行反变换之前,将系数小于10的值设为0,再进行反变换
代码:
clearall
%读入图像并转换为灰度图像
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,[0255]);title('反变换图像');
实验结果:
图2-2a)图2-2b)
图2-2c)
结果分析:
在执行离散余弦变换过程中,只取离散余弦变换系数大于10的系数,所示的反变换结果如图2-2c)和原图像2-2a)比较,通过肉眼观测,很难看出两者的区别,如果将系数小于50和小于100的值设为0,反变换得到的结果如图2-2d)和2-2e)所示,图像的清晰度越来越低,图像质量越来越差。
2-2d)2-2e)
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压缩:
代码:
clearall
%读入图像并显示
REG=imread('D:
\matlab\girl.jpg');
I=rgb2gray(REG);
figure
(1);
imshow(I);title('原始图像');
%图像数据类型转换为double型
I=im2double(I);
D=dctmtx(8);
%系数取舍矩阵
mask=[11111000
11110000
11100000
11000000
10000000
00000000
00000000
00000000];
%DCT变换D->P1;[88]->x;D->P2'
Bdct=blkproc(I,[88],'P1*x*P2',D,D');
%系数选择
Bch=blkproc(Bdct,[88],'P1.*x',mask);
%IDCT变换
Bidct=blkproc(Bch,[88],'P1*x*P2',D',D);
%结果显示
figure
(2),imshow(Bidct);
title('解压图像');
实验结果:
2-3a)2-3b)
2-3c)
结果分析:
如图2-3c)所示,尽管在反变换过程中只保留了15/64=23.4%的系数,单反变换图像依然有较好的视觉效果,仔细观察图像可以看出,解压图像边缘线条边缘比较模糊,这说明在压缩过程中抛弃了图像的高频成分,因而图像经过DCT后,其低频分量主要集中在左上角,而高频分量集中在右下角。
第3章基于小波变换的图像压缩
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用小波变换进行压缩:
代码:
clearall
REG=imread('D:
\matlab\girl.jpg');
X=rgb2gray(REG);
subplot(2,2,1);
image(X);colormap(gray(256));axissquare;
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=[A1H1;V1D1];
%显示第一层频率信息
subplot(2,2,2);
image(c1);colormap(gray(256));axissquare;
title('图像分解信息');
%图像压缩,保留第一层低频信息并对其量化编码
ca1=wcodemat(cA1,192,'mat',0);
subplot(2,2,3);
image(ca1);colormap(gray(256));axissquare;
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));axissquare;
title('第2次压缩图像');
disp('第2次压缩图像的大小为:
');
whos('ca2');
实验结果:
图3-1a)
图3-1b)
结果分析:
从结果可以看出,第一次压缩式提取原始图像中小波分解第一层的低频信息,此时压缩效果较好,压缩比较小(约0.28)。
第二次压缩式提取第一层分解低频部分的低频信息,即第二层的的低频部分,其压缩比较大(约0.07),压缩效果从视觉上看还可以。
例:
用wdencmp函数对图像D:
\matlab\girl.jpg进行压缩:
代码:
clearall
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-2a)
图3-2b)
结果分析:
图像经压缩后,压缩效果较好,压缩也比较小约(0.48),能量保留约100%。
第4章结束语
本文主要描述了各种变换在图像压缩中的处理。
由实验结果可以看出:
二维傅里叶、离散余弦变换、小波变换均可实现对图像的压缩处理。
其中,傅里叶变换对图像压缩表现最直接,但是只能对二进制图像进行压缩,且对于小值系数的过滤的临界值不好判断。
离散余弦变换结果可以看出图像的能量都集中在左上角,所以既可以和傅里叶变换一样对小值系数进行过滤,也可以进行乘矩阵的方式,保留变换结果左上角的系数,所以避免了衡量临界值大小的麻烦。
而小波变换保留低频信息是压缩办法中最简单的一种,他不需要经过其他处理即可获得较好的压缩效果。
本文来自网络,版权归原作者所有,请下载后,尽快删除。
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 二维 福利 变换 图像 处理 技术