《Matlab常用图像操作.doc》由会员分享,可在线阅读,更多相关《Matlab常用图像操作.doc(14页珍藏版)》请在金锄头文库上搜索。
1、Matlab常用图像操作 一. 读写图像文件1. imreadimread函数用于读入各种图像文件,如:a=imread(e:w01.tif)注:计算机E盘上要有w01相应的.tif文件。2. imwriteimwrite函数用于写入图像文件,如:imwrite(a,e:w02.tif,tif)3. imfinfoimfinfo函数用于读取图像文件的有关信息,如:imfinfo(e:w01.tif)二. 图像的显示1. imageimage函数是MATLAB提供的最原始的图像显示函数(主要彩色显示图象),如:a=1,2,3,4;4,5,6,7;8,9,10,11,12;image(a);2.
2、imshowimshow函数用于灰度图像文件的显示,如:i=imread(e:w01.tif);imshow(i);3. colorbarcolorbar函数用显示图像的颜色条。 通常,颜色映象进行过调节,把数据从最小扩展到最大,也就是说整个颜色映象都用于绘图。有时也许想改变颜色使用的方法。函数caxis代表颜色轴,因为颜色增加了另一个维数,它允许对数据范围的一个子集使用整个颜色映象或者对数据的整个集合只使用当前颜色映象的一部分。 cmin,cmax=caxis返回映射到颜色映象中第一和最后输入项的最小和最大的数据。它们通常被设成数据的最小值和最大值。比如,函数 mesh(peaks) 会画出
3、函数peaks的网格图,并把颜色轴caxis设为-6.5466,8.0752,即Z的最小值和最大值。这些值之间的数据点,使用从颜色映象 中经插值得到的颜色。如:i=imread(e:w01.tif);imshow(i);colorbar; 4 .figurefigure函数用于设定图像显示窗口,如:figure(1); /figure(2);5.imagesc(a); caxis(-3 8) ; colorbar; 标尺标度从-3,到8 显示标度尺。三. 图像的变换1. fft2fft2函数用于数字图像的二维傅立叶变换,如:i=imread(e:w01.tif);j=fft2(i);2. if
4、ft2ifft2函数用于数字图像的二维傅立叶反变换,如:i=imread(e:w01.tif);j=fft2(i);k=ifft2(j);3. 利用fft2计算二维卷积利用fft2函数可以计算二维卷积,如:a=8,1,6;3,5,7;4,9,2;b=1,1,1;1,1,1;1,1,1;a(8,8)=0;b(8,8)=0;c=ifft2(fft2(a).*fft2(b);c=c(1:5,1:5);利用conv2(二维卷积函数)校验, 如:a=8,1,6;3,5,7;4,9,2;b=1,1,1;1,1,1;1,1,1;c=conv2(a,b);四. 模拟噪声生成函数和预定义滤波器1. imnois
5、eimnoise函数用于对图像生成模拟噪声,如:i=imread(e:w01.tif);j=imnoise(i,gaussian,0,0.02);%模拟高斯噪声2. fspecialfspecial函数用于产生预定义滤波器,如:h=fspecial(sobel);%sobel水平边缘增强滤波器h=fspecial(gaussian);%高斯低通滤波器h=fspecial(laplacian);%拉普拉斯滤波器h=fspecial(log);%高斯拉普拉斯(LoG)滤波器h=fspecial(average);%均值滤波器五. 图像的增强1. 直方图imhist函数用于数字图像的直方图显示,如:
6、i=imread(e:w01.tif);imhist(i);2. 直方图均化histeq函数用于数字图像的直方图均化,如:i=imread(e:w01.tif);j=histeq(i);3. 对比度调整imadjust函数用于数字图像的对比度调整,如:i=imread(e:w01.tif);j=imadjust(i,0.3,0.7,);4. 对数变换log函数用于数字图像的对数变换,如:i=imread(e:w01.tif);j=double(i);k=log(j);5. 基于卷积的图像滤波函数filter2函数用于图像滤波,如:i=imread(e:w01.tif);h=1,2,1;0,0,
7、0;-1,-2,-1;j=filter2(h,i);6. 线性滤波利用二维卷积conv2滤波, 如:i=imread(e:w01.tif);h=1,1,1;1,1,1;1,1,1;h=h/9;j=conv2(i,h);7. 中值滤波medfilt2函数用于图像的中值滤波,如:i=imread(e:w01.tif);j=medfilt2(i);8. 锐化(1)利用Sobel算子锐化图像, 如:i=imread(e:w01.tif);h=1,2,1;0,0,0;-1,-2,-1;%Sobel算子j=filter2(h,i);(2)利用拉氏算子锐化图像, 如:i=imread(e:w01.tif);
8、j=double(i);h=0,1,0;1,-4,0;0,1,0;%拉氏算子k=conv2(j,h,same);m=j-k;六. 举例二维傅立叶变换和二维傅立叶反变换:i=imread(e:w01.tif);figure(1);imshow(i);colorbar;j=fft2(i);k=fftshift(j);figure(2);l=log(abs(k);imshow(l,);colorbarn=ifft2(j)/255;figure(3);imshow(n);colorbar;图像的变换1. 离散傅立叶变换的 Matlab 实现 Matlab 函数 fft、fft2 和 fftn 分别可以
9、实现一维、二维和 N 维 DFT 算法;而函数 ifft、ifft2 和 ifftn 则用来计算反 DFT 。这些函数的调用格式如下: Afft(X,N,DIM) 其中,X 表示输入图像;N 表示采样间隔点,如果 X 小于该数值,那么 Matlab 将会对 X 进行零填充,否则将进行截取,使之长度为 N ;DIM 表示要进行离散傅立叶变换。 Afft2(X,MROWS,NCOLS) 其中,MROWS 和 NCOLS 指定对 X 进行零填充后的 X 大小。 Afftn(X,SIZE)其中,SIZE 是一个向量,它们每一个元素都将指定 X 相应维进行零填充后的长度。 函数 ifft、ifft2 和
10、 ifftn的调用格式于对应的离散傅立叶变换函数一致。例子:图像的二维傅立叶频谱% 读入原始图像Iimread(lena.bmp);imshow(I)% 求离散傅立叶频谱J=fftshift(fft2(I);figure;imshow(log(abs(J),8,10)2. 离散余弦变换的 Matlab 实现2.1. dct2 函数功能:二维 DCT 变换格式:B=dct2(A) B=dct2(A,m,n) B=dct2(A,m,n) 说明:Bdct2(A) 计算 A 的 DCT 变换 B ,A 与 B 的大小相同;Bdct2(A,m,n) 和 B=dct2(A,m,n) 通过对 A 补 0 或
11、剪裁,使 B 的大小为 mn。2.2. dict2 函数功能:DCT 反变换格式:B=idct2(A) B=idct2(A,m,n) B=idct2(A,m,n) 说明:Bidct2(A) 计算 A 的 DCT 反变换 B ,A 与 B 的大小相同;Bidct2(A,m,n) 和 B=idct2(A,m,n) 通过对 A 补 0 或剪裁,使 B 的大小为 mn。2.3. dctmtx函数功能:计算 DCT 变换矩阵格式:Ddctmtx(n)说明:Ddctmtx(n) 返回一个 nn 的 DCT 变换矩阵,输出矩阵 D 为 double 类型。3. 图像小波变换的 Matlab 实现3.1 一维
12、小波变换的 Matlab 实现(1) dwt 函数功能:一维离散小波变换格式:cA,cD=dwt(X,wname) cA,cD=dwt(X,Lo_D,Hi_D)说明: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(c
13、A,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 个点。3.2 二维小波变换的 Matlab 实现 二维小波变换的函数- 函数名 函数功能- dwt2 二维离散小波变换 wavedec2 二维信号的多层小波分解 idwt2 二