MatLab代码大全.doc
《MatLab代码大全.doc》由会员分享,可在线阅读,更多相关《MatLab代码大全.doc(55页珍藏版)》请在冰豆网上搜索。
![MatLab代码大全.doc](https://file1.bdocx.com/fileroot1/2022-10/7/7532c781-3ffb-4e4d-9b92-e00ec69289dd/7532c781-3ffb-4e4d-9b92-e00ec69289dd1.gif)
第2章图像获取
2.3.2二维连续傅里叶变换
例2.2
figure
(1);%建立图形窗口1
[u,v]=meshgrid(-1:
0.01:
1);%生成二维频域网格
F1=abs(sinc(u.*pi));
F2=abs(sinc(v.*pi));
F=F1.*F2;%计算幅度频谱F=|F(u,v)|
surf(u,v,F);%显示幅度频谱,如图2.3(b)
shadinginterp;%平滑三维曲面上的小格
axisoff;%关闭坐标系
figure
(2);%建立图形窗口2
F1=histeq(F);%扩展F的对比度以增强视觉效果
imshow(F1);%用图像来显示幅度频谱,如图2.3(c)
第3章图像变换
3.4.4二维FFT的MATLAB实现
例3.2简单图像及其傅里叶变换
MATLAB程序:
%建立简单图像d并显示之
d=zeros(32,32);%图像大小32´32
d(13:
20,13:
20)=1;%中心白色方块大小为8´8
figure
(1);%建立图形窗口1
imshow(d,'notruesize');%显示图像d如图3.5(a)所示
%计算傅里叶变换并显示之
D=fft2(d);%计算图像d的傅里叶变换,fft2(d)=fft(fft(d).').'
figure
(2);%建立图形窗口2
imshow(abs(D),[-15],'notruesize');%显示图像d的傅里叶变换谱如3.5(b)所示
例3.3MATLAB图像及其傅里叶变换谱
MATLAB程序:
figure
(1);
loadimdemossaturn2;%装入MATLAB图像saturn2
imshow(saturn2);%显示图像saturn2如图3.6(a)所示
figure
(2);
S=fftshift(fft2(saturn2));%计算傅里叶变换并移位
imshow(log(abs(S)),[]);%显示傅里叶变换谱如3.6(b)所示
例3.4真彩图像及其傅里叶变换谱
MATLAB程序:
figure
(1);
A=imread('image1.jpg');%装入真彩图像,见图1.1(b)
B=rgb2gray(A);%将真彩图像转换为灰度图像
imshow(B);%显示灰度图像如图3.7(a)所示
C=fftshift(fft2(B));%计算傅里叶变换并移位
figure
(2);
imshow(log(abs(C)),[]);%显示傅里叶变换谱如3.7(b)所示
3.5.4离散余弦变换的MATLAB实现
例3.5计算并显示真彩图像余弦变换的MATLAB程序如下:
RGB=imread('image2.jpg');%装入真彩图像
figure
(1);
imshow(RGB);%显示彩色图像
GRAY=rgb2gray(RGB);%将真彩图像转换为灰度图像
figure
(2);
imshow(GRAY);%显示灰度图像如图3.10(a)所示
DCT=dct2(GRAY);%进行余弦变换
figure(3);
imshow(log(abs(DCT)),[]);%显示余弦变换如图3.10(b)所示。
3.8.2Radon变换的MATLAB实现
例3.8真彩图像的Radon变换
MATLAB程序如下:
RGB=imread('image2.jpg');%装入真彩图像
GRAY=rgb2gray(RGB);%将真彩图像转换为灰度图像
figure
(2);
imshow(GRAY);%显示灰度图像如图3.16(a)
[R,xp]=radon(GRAY,[045]);%计算变换角度为0°和45°的Radon变换
figure;plot(xp,R(:
1));title('R_{0^o}(x\prime)')
%显示0°方向上的Radon变换如图3.16(b)
figure;plot(xp,R(:
2));title('R_{45^o}(x\prime)')
%显示45°方向上的Radon变换如图3.16(c)
例3.9连续角度的Radon变换
对于一组连续角度的Radon变换通常用一幅图像来表示。
本例先建立一幅简单图像,然后令变换角度从0°以1°的增量变化到180°时的Radon变换情况。
其MATLAB程序如下:
I=zeros(100,100);%建立简单图像如图3.17(a)
I(25:
75,25:
75)=1;
figure
(1);imshow(I);
theta=0:
180;%规定变换角度的范围
[R,xp]=radon(I,theta);%计算Radon变换
figure
(2);
imagesc(theta,xp,R);%以图像方式显示变换结果R,
%其x轴和y轴分别为theta和xp
title(‘R_{\theta}(X\prime)’);%显示图像标题
xlabel(‘\theta(degrees)’);%显示x坐标“”
ylabel(‘X\prime’);%显示y坐标“”
set(gca,’Xtick’,0:
20:
180);%设置x坐标刻度
colormap(hot);%设置调色板
colorbar;%显示当前图像的调色板
第4章图像增强
4.2.1直接灰度变换
Matlab程序实现图像求反:
I=imread('cameraman.tif');
imshow(I)
I=double(I)
I=256-1-I
I=uint8(I)
figure
imshow(I)
例4.1
用Matlab程序实现线性灰度变换的图像增强:
%读入并显示原始图像
I=imread('pout.tif');
imshow(I);
I=double(I);
[M,N]=size(I);
%进行线性灰度变换
fori=1:
M
forj=1:
N
ifI(i,j)<=30
I(i,j)=I(i,j);
elseifI(i,j)<=150
I(i,j)=(200-30)/(150-30)*(I(i,j)-30)+30;
else
I(i,j)=(255-200)/(255-150)*(I(i,j)-150)+200;
end
end
end
例4.2
I=imread('lena.bmp');
figure;imshow(I);
I=double(I);
I2=41*log(1+I);
I2=uint8(I2);
figure;imshow(I2);
例4.3
灰度切割变换的Matlab的程序如下:
I=imread('007.bmp');
figure;imshow(I);
I=double(I)
[M,N]=size(I);
fori=1:
M
forj=1:
N
ifI(i,j)<=50
I(i,j)=40;
elseifI(i,j)<=180
I(i,j)=220;
else
I(i,j)=40;
end
end
end
I=uint8(I);
figure;imshow(I);
例4.4
具体Matlab程序如下:
I=imread('lena.bmp');
imshow(I);
I=double(I);
[M,N]=size(I);
fork=1:
8
J=zeros(M,N);
fori=1:
M
forj=1:
N
temp=I(i,j);
s1=0;s2=0;
range=[k:
-1:
1];
ford=range
s1=2^(8-d)+s1;s2=2^(8-d+1);
iftemp>=s1&tempJ(i,j)=255;break;
end
end
end
end
J=uint8(J);
figure;imshow(J);
end
4.2.2直方图修正
例4.6直方图均衡化效果实例
用Matlab中的histeq函数实现直方图均衡化的程序如下:
I=imread('circuit.tif');
figure
subplot(221);imshow(I);
subplot(222);imhist(I)
I1=histeq(I);
figure;
subplot(221);imshow(I1)
subplot(222);imhist(I1)
例4.8:
直方图规定效果实例
用matlab中的histeq函数实现直方图均衡化的程序如下:
I=imread('circuit.tif');
[M,N]=size(I);
fori=1:
8:
257
counts(i)=i;
end
Q=imread('circuit.tif');
N=histeq(Q,counts);
figure
subplot(221);imshow(N);
subplot(222);imhist(N);
axis([026005000]);
4.2.3图像间运算
例:
用图像平均减少随机噪声
I=imread('tire.tif');
[M,N]=size(I);
II1=zeros(M,N);
fori=1:
16
II(:
:
i)=imno