二维福利叶变换图像处理技术.docx
- 文档编号:14295087
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:25
- 大小:690.72KB
二维福利叶变换图像处理技术.docx
《二维福利叶变换图像处理技术.docx》由会员分享,可在线阅读,更多相关《二维福利叶变换图像处理技术.docx(25页珍藏版)》请在冰点文库上搜索。
二维福利叶变换图像处理技术
第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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二维 福利 变换 图像 处理 技术