MATLAB数字图像处理几何变换傅里叶变换.docx
《MATLAB数字图像处理几何变换傅里叶变换.docx》由会员分享,可在线阅读,更多相关《MATLAB数字图像处理几何变换傅里叶变换.docx(16页珍藏版)》请在冰豆网上搜索。
MATLAB数字图像处理几何变换傅里叶变换
Matlab数字图像处理实验指导
实验目的:
通过实验,深入理解和掌握图像处理的基本技术,提高动手实践能力。
实验环境:
Matlab变成
实验一图像的几何变换
实验内容:
设计一个程序,能够实现图像的各种几何变换。
实验要求:
读入图像,打开图像,实现图像的平移变换、比例缩放、转置变换、镜像变换、旋转变换等操作。
实验原理:
图像几何变换又称为图像空间变换,它将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置。
学习几何变换的关键就是要确定这种空间映射关系,以及映射过程中的变化参数。
几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。
一个几何变换需要两部分运算:
首先是空间变换所需的运算,如平移、镜像和旋转等,需要用它来表示输出图像与输入图像之间的(像素)映射关系;此外,还需要使用灰度插值算法,因为按照这种变换关系进行计算,输出图像的像素可能被映射到输入图像的非整数坐标上。
设原图像f(x0,y0)经过几何变换产生的目标图像为g(x1,y1),则该空间变换(映射)关系可表示为:
x1=s(x0,y0)
y1=t(x0,y0)
其中,s(x0,y0)和t(x0,y0)为由f(x0,y0)到g(x1,y1)的坐标换变换函数。
一、图像平移
图像平移就是将图像中所有的点按照指定的平移量水平或者垂直移动。
二、图像镜像
镜像变换又分为水平镜像和垂直镜像。
水平镜像即将图像左半部分和右半部分以图像竖直中轴线为中心轴进行对换;而竖直镜像则是将图像上半部分和下半部分以图像水平中轴线为中心轴进行对换。
三、图像转置
图像转置是将图像像素的x坐标和y坐标呼唤。
图像的大小会随之改变——高度和宽度将呼唤。
四、图像的缩放
图像缩放是指将图像大小按照指定的比率放大或者缩小。
图像缩放函数imresize();调用格式如下:
B=imresize(A,Scale,method);
参数A为要进行缩放的原始图像。
Scale为统一的缩放比例。
如果希望在x和y方向上以不同比例进行缩放,可用如下调用形式。
B=imresize(A,[mrowsncols],method);向量参数[mrowsncols]指明了变换后目标图像B的具体行数和列数。
可选参数method允许imresize()函数指定的插值方法。
其合法值同imtransform()函数,但默认为最近邻插值。
五、图像旋转
图像旋转一般是指将图像围绕某一指定点旋转一定的角度。
旋转通常也会改变图像的大小。
1)以原点为中心的图像旋转
2)以任意点为中心的图像旋转
图像旋转变换的效果受具体插值方法的影响较为明显,本实验给出的旋转采用最近邻插值。
1)围绕图像中心的旋转变换函数imrotate(),调用方式如下:
B=imrotate(A,angle,method,’crop’);
A是要旋转的图像。
Angle为旋转角度,单位为度,如为其指定一个正直,则按逆时针方向旋转图像。
可选参数method允许imrotote()函数指定的插值方法。
‘crop’选项会裁剪旋转后增大的图像,使得到的图像和原图像大小一致。
2)以任意点为中心的图像旋转(自学)
通过调用imtransform()函数来实现以任意点为中心的图像旋转。
提示:
读取图像文件:
I=imread('filename.fmt’)
写入图像:
imwrite(I,’filename.fmt’)
显示图像:
imshow(I)
显示子图:
subplot(m,m,p)
二维空间变换:
B=imtransform(A,TFORM,method);
参数A为要进行几何变换的图像。
空间变换结构TFORM指定了具体的变换类型。
可以通过两种方法来创建TFORM结构,即使用maketform()函数和cp2tform()函数。
这里给出使用maketform()函数获得TFORM结构的方法。
T=maketform(transformtype,Matrix);参数transformtype指定了变换的类型,如常见的’affine’为二维或多维仿射变换,包括平移、旋转、比例、拉伸和错切等。
Matrix为相应的仿射变换矩阵。
可选参数method允许imtransform()函数选择的插值方法。
其合法值’bicubic’-三次插值,’bilinear’-双线性插值,’nearest’-最近邻插值。
默认时为’bilinear’-双线性插值。
函数输出B为经imtransform()变换后的目标图像。
插值算法
实现几何运算时,有两种方法。
第一种为向前映射法,其原理是将输入图像的灰度一个像素一个像素地转移到输出图像中,即从原图像坐标计算出目标图像坐标:
g(x1,y1)=f(s(x0,y0),t(x0,y0))。
第二种为向后映射法,它是向前映射变换的逆,即输出像素一个一个地映射回输入图像中。
如果一个输出像素映射到的不是输入图像的采样栅格的整数坐标处的像素点,则其灰度值就需要基于整数坐标的灰度值进行推断,这就是插值。
实验二图像的傅里叶变换
内容:
设计一个或多个程序,实现二维傅里叶变换和逆变换,并对图像进行傅里叶变换平移。
要求:
读入图像,打开图像,实现二维傅里叶变换和逆变换,等操作。
实验原理:
图像变换在图像处理和图像分析中占有重要的地位。
将图像从空间域变换到其它域(如频域)的数学变换,便于进行图像处理和图像分析。
常用的变换有:
傅里叶变换、离散余弦变换、K-L变换等。
一、傅立叶变换
若f(x)为一维连续实函数,则它的傅里叶变换可定义为
傅立叶逆变换定义如下:
函数f(x)和F(u)被称为傅立叶变换对.即对于任一函数f(x),其傅立叶变换F(u)是惟一的;反之,对于任一函数F(u),其傅立叶逆变换f(x)也是惟一的.
F(u)可以表示为如下形式:
|F(u)|称为F(u)的模,也称为函数f(x)的傅立叶谱,φ(u)称为F(u)的相角。
E(u)称为函数f(x)的能量谱或功率谱。
二、离散余弦变换(DCT变换)
傅立叶变换的一个最大的问题是:
它的参数都是复数,在数据的描述上相当于实数的两倍。
为此,我们希望有一种能够达到相同功能但数据量又不大的变换。
在此期望下,产生了DCT变换。
余弦变换实际上是傅立叶变换的实数部分.余弦变换主要用于图像的压缩,如目前的国际压缩标准的JPEG格式中就用到了DCT变换.具体的做法与DFT相似.给高频系数大间隔量化,低频部分小间隔量化。
三、K-L变换
K-L变换(Karhunen-LoeveTransform)是数字图像处理中具有广泛应用的一类重要变换;
又称为特征向量变换、主分量变换或霍特林变换;K-L变换既有连续形式的变换也有离散形式的变换;它是完全从图像的统计性质出发实现的变换。
数字图像中主要应用离散K-L变换,优点是去相关性好,该变换在数据压缩、图像旋转、遥感多光谱图像的特征选择和统计识别等方面具有重要意义。
K-L变换形式:
操作提示:
1,傅里叶变换
读入图像;imread();
傅里叶变换要求输入的矩阵为双精度浮点类型,需进行数据类型转换;im2doubel();
快速傅里叶变换;fft2();
傅里叶逆变换;ifft2();
把傅里叶变换的零频率部分移到频谱的中间,使用fftshift函数,调用格式为:
Y=fftshift(X);把fft函数、fft2函数输出的结果的零频率部分移到数组的中间,对于观察傅里叶变换频谱中间零频率部分十分有效。
在同一窗口显示3幅图像;subplot();imshow();
2,离散余弦变换
二维离散余弦变换;dct2();
二维离散余弦逆变换;idct2();
实验三灰度变换和直方图均衡处理
内容:
设计一个程序,达到空域图像增强和频域图像增强的目的。
要求:
读入图像,打开图像,实现空域图像增强和频域图像增强等操作。
操作提示:
Matlab傅立叶变换、余弦变换和小波变换
1.离散傅立叶变换的Matlab实现
Matlab函数fft、fft2和fftn分别可以实现一维、二维和N维DFT算法;而函数ifft、ifft2和ifftn则用来计算反DFT。
这些函数的调用格式如下:
A=fft(X,N,DIM)
其中,X表示输入图像;N表示采样间隔点,如果X小于该数值,那么Matlab将会对X进行零填充,否则将进行截取,使之长度为N;DIM表示要进行离散傅立叶变换。
A=fft2(X,MROWS,NCOLS)
其中,MROWS和NCOLS指定对X进行零填充后的X大小。
别可以实现一维、二维和N维DFT
A=fftn(X,SIZE)
其中,SIZE是一个向量,它们每一个元素都将指定X相应维进行零填充后的长度。
函数ifft、ifft2和ifftn的调用格式于对应的离散傅立叶变换函数一致。
别可以实现一维、二维和N维DFT
例子:
图像的二维傅立叶频谱
1.离散傅立叶变换的Matlab实现%读入原始图像
I=imread('lena.bmp');
imshow(I)
%求离散傅立叶频谱
J=fftshift(fft2(I));
figure;别可以实现一维、二维和N维DFT
imshow(log(abs(J)),[8,10])
2.离散余弦变换的Matlab实现
2.1.dct2函数
功能:
二维DCT变换Matlab
格式:
B=dct2(A)
B=dct2(A,m,n)
B=dct2(A,[m,n])函数fft、fft2和fftn分
说明:
B=dct2(A)计算A的DCT变换B,A与B的大小相同;B=dct2(A,m,n)和B=dct2(A,[m,n])通过对A补0或剪裁,使B的大小为m×n。
2.2.dict2函数
功能:
DCT反变换
格式:
B=idct2(A)
B=idct2(A,m,n)别可以实现一维、二维和N维DFT
B=idct2(A,[m,n])
说明:
B=idct2(A)计算A的DCT反变换B,A与B的大小相同;B=idct2(A,m,n)和B=idct2(A,[m,n])通过对A补0或剪裁,使B的大小为m×n。
Matlab
2.3.dctmtx函数
功能:
计算DCT变换矩阵
格式:
D=dctmtx(n)
说明:
D=dctmtx(n)返回一个n×n的DCT变换矩阵,输出矩阵D为double类型。
3.图像小波变换的Matlab实现函数
3.1一维小波变换的Matlab实现
(1)dwt函数Matlab
功能:
一维离散小波变换
格式:
[cA,cD]=dwt(X,'wname')
[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和N维DFT
说明:
[cA,cD]=dwt(X,'wname')使用指定的小波基函数'wname'对信号X进行分解,cA、cD分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D)使用指定的滤波器组Lo_D、Hi_D对信号进行分解。
(2)idwt函数
功能:
一维离散小波反变换
格式:
X=idwt(cA,cD,'wname')
X=idwt(cA,cD,Lo_R,Hi_R)
X=idwt(cA,cD,'wname',L)函数
X=idwt(cA,cD,Lo_R,Hi_R,L)
说明:
X=idwt(cA,cD,'wname')由近似分量cA和细节分量cD经小波反变换重构原始信号X。
'wname'为所选的小波函数
X=idwt(cA,cD,Lo_R,Hi_R)用指定的重构滤波器Lo_R和Hi_R经小波反变换重构原始信号X。
X=idwt(cA,cD,'wname',L)和X=idwt(cA,cD,Lo_R,Hi_R,L)指定返回信号X中心附近的L个点。
1.离散傅立叶变换的Matlab实现
3.2二维小波变换的Matlab实现
二维小波变换的函数别可以实现一维、二维和N维DFT
dwt2二维离散小波变换
wavedec2二维信号的多层小波分解
idwt2二维离散小波反变换Matlab
waverec2二维信号的多层小波重构
wrcoef2由多层小波分解重构某一层的分解信号
upcoef2由多层小波分解重构近似分量或细节分量1.离散傅立叶变换的Matlab实现
detcoef2提取二维信号小波分解的细节分量
appcoef2提取二维信号小波分解的近似分量
upwlev2二维小波分解的单层重构1.离散傅立叶变换的Matlab实现
dwtpet2二维周期小波变换
idwtper2二维周期小波反变换
(1)wcodemat函数
功能:
对数据矩阵进行伪彩色编码
格式:
Y=wcodemat(X,NB,OPT,ABSOL)
Y=wcodemat(X,NB,OPT)
Y=wcodemat(X,NB)
Y=wcodemat(X)
说明:
Y=wcodemat(X,NB,OPT,ABSOL)返回数据矩阵X的编码矩阵Y;NB伪编码的最大值,即编码范围为0~NB,缺省值NB=16;
OPT指定了编码的方式(缺省值为'mat'),即:
别可以实现一维、二维和N维DFT
OPT='row',按行编码
OPT='col',按列编码
OPT='mat',按整个矩阵编码
ABSOL是函数的控制参数(缺省值为'1'),即:
ABSOL=0时,返回编码矩阵
ABSOL=1时,返回数据矩阵的绝对值ABS(X)1.离散傅立叶变换的Matlab实现
(2)dwt2函数
功能:
二维离散小波变换
格式:
[cA,cH,cV,cD]=dwt2(X,'wname')
[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)
说明:
[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname'对二维信号X进行二维离散小波变幻;cA,cH,cV,cD分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)使用指定的分解低通和高通滤波器Lo_D和Hi_D分解信号X。
1.离散傅立叶变换的Matlab实现
(3)wavedec2函数
功能:
二维信号的多层小波分解1.离散傅立叶变换的Matlab实现
格式:
[C,S]=wavedec2(X,N,'wname')
[C,S]=wavedec2(X,N,Lo_D,Hi_D)
说明:
[C,S]=wavedec2(X,N,'wname')使用小波基函数'wname'对二维信号X进行N层分解;[C,S]=wavedec2(X,N,Lo_D,Hi_D)使用指定的分解低通和高通滤波器Lo_D和Hi_D分解信号X。
别可以实现一维、二维和N维DFT
(4)idwt2函数
功能:
二维离散小波反变换
格式:
X=idwt2(cA,cH,cV,cD,'wname')
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)
X=idwt2(cA,cH,cV,cD,'wname',S)别可以实现一维、二维和N维DFT
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)
说明:
X=idwt2(cA,cH,cV,cD,'wname')由信号小波分解的近似信号cA和细节信号cH、cH、cV、cD经小波反变换重构原信号X;X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)使用指定的重构低通和高通滤波器Lo_R和Hi_R重构原信号X;X=idwt2(cA,cH,cV,cD,'wname',S)和X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)返回中心附近的S个数据点。
(5)waverec2函数
说明:
二维信号的多层小波重构
格式:
X=waverec2(C,S,'wname')
X=waverec2(C,S,Lo_R,Hi_R)
说明:
X=waverec2(C,S,'wname')由多层二维小波分解的结果C、S重构原始信号X,'wname'为使用的小波基函数;X=waverec2(C,S,Lo_R,Hi_R)使用重构低通和高通滤波器Lo_R和Hi_R重构原信号。
Allnodes计算树结点
appcoef提取一维小波变换低频系数
appcoef2提取二维小波分解低频系数
bestlevt计算完整最佳小波包树别可以实现一维、二维和N维DFT
besttree计算最佳(优)树
* biorfilt双正交样条小波滤波器组
biorwavf双正交样条小波滤波器Matlab
* centfrq求小波中心频率
cgauwavfComplexGaussian小波
cmorwavfcoiflets小波滤波器1.离散傅立叶变换的Matlab实现
cwt一维连续小波变换
dbauxDaubechies小波滤波器计算
dbwavfDaubechies小波滤波器dbwavf(W)W='dbN'N=1,2,3,...,50别可以实现一维、二维和N维DFT
ddencmp获取默认值阈值(软或硬)熵标准
depo2ind将深度-位置结点形式转化成索引结点形式
detcoef提取一维小波变换高频系数Matlab
detcoef2提取二维小波分解高频系数
disp显示文本或矩阵
drawtree画小波包分解树(GUI)别可以实现一维、二维和N维DFT
dtree构造DTREE类
dwt单尺度一维离散小波变换
dwt2单尺度二维离散小波变换别可以实现一维、二维和N维DFT
dwtmode离散小波变换拓展模式
* dyaddown二元取样
* dyadup二元插值1.离散傅立叶变换的Matlab实现
entrupd更新小波包的熵值
fbspwavfB样条小波
gauswavfGaussian小波Matlab
get获取对象属性值
idwt单尺度一维离散小波逆变换
idwt2单尺度二维离散小波逆变换
ind2depo将索引结点形式转化成深度—位置结点形式
* intwave积分小波数
isnode判断结点是否存在Matlab
istnode判断结点是否是终结点并返回排列值
iswt一维逆SWT(StationaryWaveletTransform)变换
iswt2二维逆SWT变换Matlab
leaves Determineterminalnodes
mexihat墨西哥帽小波
meyerMeyer小波别可以实现一维、二维和N维DFT
meyerauxMeyer小波辅助函数
morletMorlet小波
nodease计算上溯结点
nodedesc计算下溯结点(子结点)
nodejoin重组结点
nodepar寻找父结点别可以实现一维、二维和N维DFT
nodesplt分割(分解)结点
noleaves Determinenonterminalnodes
ntnode Numberofterminalnodes函数fft、fft2和fftn分
ntree ConstructorfortheclassNTREE
* orthfilt正交小波滤波器组
plot绘制向量或矩阵的图形
* qmf镜像二次滤波器
rbiowavf Reversebiorthogonalsplinewaveletfilters
read读取二进制数据
readtree读取小波包分解树
* scal2frq Scaletofrequency
set Matlab
shanwavf Shannonwavelets
swt一维SWT(StationaryWaveletTransform)变换
swt2二维SWT变换
symaux Symletwaveletfiltercomputation.
symwavfSymlets小波滤波器
thselect信号消噪的阈值选择
thodes References
treedpth求树的深度
treeord求树结构的叉数
upcoef一维小波分解系数的直接重构
upcoef2二维小波分解系数的直接重构
upwlev单尺度一维小波分解的重构
upwlev2单尺度二维小波分解的重构
wavedec单尺度一维小波分解
wavedec2多尺度二维小波分解Matlab
wavedemo小波工具箱函数demo
* wavefun小波函数和尺度函数
* wavefun2二维小波函数和尺度函数别可以实现一维、二维和N维DFT
wavemenu小波工具箱函数menu图形界面调用函数
* wavemngr小波管理函数
waverec多尺度一维小波重构1.离散傅立叶变换的Matlab实现
waverec2多尺度二维小波重构
wbmpen Penalizedthresholdforwavelet1-Dor2-Dde-noising
wcodemat对矩阵进行量化编码1.离散傅立叶变换的Matlab实现
wdcbm Thresholdsforwavelet1-DusingBirge-Massartstrategy
wdcbm2 Thresholdsforwavelet2-DusingBirge-Massartstrategy
wden用小波进行一维信号的消噪或压缩
wdencmp De-noisingorcompressionusingwavelets
wentropy计算小波包的熵
wextend Extendavectororamatrix
* wfilters小波滤波器
wkeep提取向量或矩阵中的一部分
* wmaxlev计算小波分解的最大尺度1.离散傅立叶变换的Matlab实现
wnoise产生含噪声的测试函数数据
wnoisest估计一维小波的系数的标准偏差
wp2wtree从小波包树中提取小波树 1.离散傅立叶变换的Matlab实现
wpcoef计算小波包系数
wpcutree