资源描述
第一章 基于二维傅里叶变换的图像处理技术
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
展开阅读全文