数字图象处理基础Word格式.docx
《数字图象处理基础Word格式.docx》由会员分享,可在线阅读,更多相关《数字图象处理基础Word格式.docx(47页珍藏版)》请在冰豆网上搜索。
;
g2=g(50:
150,50:
150);
g3=g(1:
2:
end,1:
end);
g4=g(end:
-1:
1,:
subplot(2,2,1);
imshow(g1);
title('
图像旋转90度'
subplot(2,2,2);
imshow(g2);
title('
图像裁剪'
subplot(2,2,3);
imshow(g3);
图像抽取'
subplot(2,2,4);
imshow(g4);
图像翻转'
执行结果:
内容二:
f=sin;
plot(f(100,:
));
e:
\13.tif'
function[f]=sin()
A=1;
u=1/(4*pi);
v=1/(4*pi);
M=256;
N=256;
tic
forx=1:
M
ux=u*(x-1);
fory=1:
N
vy=v*(y-1);
f(x,y)=A*sin(ux+vy);
end
t1=toc;
t1;
tic
x=0:
M-1;
y=0:
N-1;
[Y,X]=meshgrid(y,x);
g=A*sin(u*X+v*Y);
t2=toc;
t2;
figure,imshow(f);
figure,imshow(g);
内容三:
f1=imread('
\2.jpg'
f=rgb2gray(f);
f1=rgb2gray(f1);
g=imadd(f,30);
imshow(g);
A=f(10:
80,10:
80);
B=f(10:
C=A+B;
D=C-A;
subplot(2,3,1);
imshow(f);
A图像'
subplot(2,3,2);
imshow(mat2gray(C));
C=A+B图像'
subplot(2,3,3);
imshow(B);
B图像'
subplot(2,3,4);
C图像'
subplot(2,3,5);
imshow(A);
subplot(2,3,6);
imshow(mat2gray(D));
D=C-A图像'
\1b.jpg'
\2b.jpg'
f=grb2gray(f);
f=f(10:
A=f1(10:
B=f+A;
C=B-A;
f图像'
B=f+A图像'
imshow(C);
C=B-A图像'
g=imcomplement(f1);
gg=mat2gray(double(f1));
g1=immultiply(gg,3);
>
a
心得体会:
通过实验一的完成,初次熟练掌握了MATLAB的一些常用方法的使用如图像的裁剪,旋转,抽样,图像的灰度处理,图像的计算,图像的读入,显示,保存等方法。
实验二
掌握灰度变换(线性、指数、对数变换、对比度拉伸、求补计算)和直方图修正技术等方法在图像增强中的应用,并熟练掌握Matlab函数:
g=imadjust(f,[low_inhigh_in],[low_outhigh_out],gama)
g=hiseq(f,count)的应用。
1)编写一个实现灰度变换(线性、指数和对数、对比度拉伸和求补)图像增强的matlab程序并分析各种方法的效果。
2)编写一个实现直方图均衡化处理程序,并理解直方图均衡化实现步骤。
内容1:
编码:
functiong=intrans(f,varargin)
%亮度变换
%f:
输入图像
%varargin:
函数可变参数数目
error(nargchk(2,7,nargin))
classin=class(f);
%测试图像文件的类型
ifstrcmp(class(f),'
double'
)&
max(f(:
))>
1&
~strcmp(varargin{1},'
log'
)
f=mat2gray(f);
%转换灰度
else
f=im2double(f);
method=varargin{1};
leng=length(varargin);
switchmethod
case'
neg'
%获得图像负片
g=imcomplement(f);
%对数变换
ifleng==1
c=1;
elseifleng==2
c=varargin{2};
else
error('
Incorrectnumberofinputforthelogoption.'
end
g=c*(log(1+double(f)));
case'
gamma'
%灰度调整变换
ifleng<
2
Notenoughinputsforthegammaoption.'
gam=varargin{2};
ifleng==2
g=imadjust(f,[],[],gam);
elseifleng==4
low_out=varargin{3};
high_out=varargin{4};
g=imadjust(f,[],[low_outhigh_out],gam);
else
low_in=varargin{3};
high_in=varargin{4};
low_out=varargin{5};
high_out=varargin{6};
g=imadjust(f,[low_inhigh_in],[low_outhigh_out],gam);
stretch'
%对比度拉伸变换
ifleng==1
m=mean2(f);
%求f图像的平均值
E=4.0;
elseifleng==3
m=varargin{2};
E=varargin{3};
elseerror('
g=1./(1+(m./(f+eps)).^E);
otherwise
Unknowmethod.'
%转换图像类型
g=changeclass(classin,g);
\Penguins.jpg'
g=intrans(f,'
0.3,0.2,0.8);
1,0.1,0.9);
f=double(f);
v=mean2(im2double(f));
v,0.9);
imshow(g,[]);
运行结果:
内容2:
functionghisteg(f,varargin)
h=imhist(f);
h1=h(1:
1:
256);
horz=1:
256;
bar(horz,h1);
iflength(varargin)==0
g=histeq(f);
b=varargin{1}
g=histeq(f,b);
h=imhist(g);
D:
ghisteg(f);
通过实验二的完成,掌握灰度变换如:
线性,指数,对数变换,对比度拉伸,求补运算。
直方图修正技术等方法在图像增强中的应用,且熟练掌握了MATLAB的一些函数。
如函数imadjust(f,[low_inhigh_in],[low_outhigh_out],gama),
imcomplement(f);
hiseq(f,count)。
实验三
利用双峰高斯函数或cos函数拟合规定直方图并作灰度变换处理:
h=imhist(f,n);
g=histeq(f,hspec)
plot(x,cdf)
bar(horz,h1)
1)编写一个双峰高斯函数或cos函数程序。
2)分别应用双峰高斯函数或cos函数作直方图规定化处理。
3)与直方图均衡化处理结果比较
双峰高斯函数:
其中:
a1,a2:
两个峰的振幅值,取值(0~1)之间
K:
函数偏移值
3.实验源码与执行结果
内容1
functionp=twomodegauss(m1,sig1,m2,sig2,a1,a2,k)
%双峰高斯函数
c1=a1*(1/((2*pi)^0.5)*sig1);
k1=2*(sig1^2);
c2=a2*(1/((2*pi)^0.5)*sig2);
k2=2*(sig2^2);
z=linspace(0,1,256);
p=k+c1*exp(-((z-m1).^2)./k1)+c2*exp(-((z-m2).^2)./k2);
p=p./sum(p(:
));
plot(p);
functionp=SinA(k)
v0=pi;
z=linspace(0,v0,256);
p=k+sin(z);
p=p./sum(p(:
f=imread('
f=im2double(f);
p=twomodegauss(0.2,0.05,0.7,0.05,0.6,0.1,0.002);
g=histeq(f,p);
figure,imshow(g);
h=imhist(g);
figure,plot(h);
p1=SinA(0.1);
g1=histeq(f,p1);
figure,imshow(g1);
h=imhist(g1);
内容2:
f=imread(‘d/1.jpg'
f=imadjust(f,[],[00.5],1);
subplot(3,2,1);
h=imhist(f);
线形变换后图像'
subplot(3,2,2);
plot(h);
g=histeq(f,250);
subplot(3,2,3);
h1=imhist(g);
均衡化后图像'
subplot(3,2,4);
plot(h1);
g1=histeq(f,p);
subplot(3,2,5);
规定化后图像'
subplot(3,2,6);
h2=imhist(g1);
plot(h2);
通过完成实验三,掌握了利用双高峰函数和cos函数拟合规定直方图并作灰度变换处理发现了双高峰函数与cos函数作直方图处理的效果与直方图均衡化处理效果的不同与差异。
实验四
应用傅里叶变换与频率滤波方法作图像增强处理,以掌握傅里叶变换的应用并加深理论的理解。
1)读入一幅图像并作该图像的傅里叶变换,显示傅里叶变换后的傅里叶谱的图像和采用对数方式增强显示,并理解其意义。
2)分别采用不同的低通和高通滤波函数方法实现对噪声消除和图像锐化处理。
3)利用傅里叶逆变换实现图像显示,并观察不同的低通和高通滤波函数方法图像处理效果。
内容2:
修改上述程序中的滤波器为高通滤波器,并重新执行上述命令。
内容3:
修改上述程序,分别采用理想低通和高通滤波器,巴特沃斯低通和高通滤波器,高斯低通滤和高通滤波器对图像作滤波处理,并且将他们的结果显示在一个图像窗口内。
重新执行上述命令。
functiong=hfilter1(f)
AB=size(f);
PQ=2*AB;
M=PQ
(1);
N=PQ
(2);
u=0:
(M-1);
v=0:
(N-1);
idx=find(u>
M/2);
u(idx)=u(idx)-M;
idy=find(v>
N/2);
v(idy)=v(idy)-N;
[V,U]=meshgrid(v,u);
D=sqrt(U.^2+V.^2);
D0=0.05*PQ
(1);
H=exp(-(D.^2)./(2*(D0^2)));
%H=1-H;
%高通滤波器
H1=fftshift(H);
F=fft2(f,size(H,1),size(H,2));
F1=fftshift(F);
F1=log(1+abs(F1));
g=real(ifft2(H.*F));
g=g(1:
size(f,1),1:
size(f,2));
imshow(f,[]);
title(‘原始图像’);
imshow(H1,[]);
title(‘滤波器图像’);
imshow(F1,[]);
title(‘傅里叶频谱图像’);
imshow(g,[]);
title(‘低通滤波后图像’);
functionp=work04_01()
f1=imnoise(f,'
salt&
pepper'
0.1);
g=hfilter1(f1);
内容二,三:
functiong=hfilter3(f)
N=PQ
(2);
v=0:
La=double(D<
=D0);
Lb=1./(1+(D./D0).^2);
Lc=exp(-(D.^2)./(2*(D0^2)));
Ha=1-La;
Hb=1-Lb;
Hc=1-Lc;
F=fft2(f,size(La,1),size(La,2));
Lg1=real(ifft2(La.*F));
Hg1=real(ifft2(Ha.*F));
Lg2=real(ifft2(Lb.*F));
Hg2=real(ifft2(Hb.*F));
Lg3=real(ifft2(Lc.*F));
Hg3=real(ifft2(Hc.*F));
figure,imshow(f,[]);
原始图像'
figure;
imshow(Lg1(1:
size(f,2)),[]);
理想低通滤波图像'
imshow(Hg1(1:
理想高通滤波图像'
imshow(Lg2(1:
巴特沃斯低通滤波图像'
imshow(Hg2(1:
巴特沃斯高通滤波图像'
imshow(Lg3(1:
高斯低通滤波图像'
imshow(Hg3(1:
高斯高通滤波图像'
执行:
D:
/1.jpg'
hfilter3(f);
执行效果:
通过这次实验的完成,掌握了应用傅里叶变换与频率滤波方法作图像增强处理,与此同时,掌握了傅里叶变换的应用并且加深了理论的理解。
实验中分别实现了不同的高通滤波和低通滤波效果,并从图像可以看出他们很大的差别,但是不同的高(低)通滤波函数显示的图像的变化并不是太大。
实验五
掌握空域平滑滤波和中值滤波等方法实现图像消噪处理和图像边缘检测处理。
主要掌握Matlab函数:
(1)滤波函数
g=imfilter(f,w,filtering_mode,boundary_options,size_options)
(2)中值滤波函数
g=medfilt2(f,[],padopt)
(3)加噪函数
g=imnoise(f,type,parameters)
(4)生成掩模函数
w=fspecial(‘type’,parameters);
1、编写一个能适应用户给定任意已知掩模的空域平滑matlab程序。
2、编写一个能适应用户给定任意大小掩模的中值滤波程序。
3、编写一个零交点的边缘检测算法程序并用该实现图像的边缘检测。
f:
f=rgb2gary(f)
w=ones(31);
Imshow(f);
g=imnoise(f,'
gaussian'
Imshow(g);
加高斯噪声图像'
g=imfilter(g,w);
Imshow(g,[]);
空间滤波图像'
w=[1111-81111];
g1=imfilter(f,w,'
replicate'
Imshow(g1,[]);
拉普拉斯图像锐化'
w1=fspecial('
prewitt'
w2=fspecial('
[55],1.45);
ph=imfilter(f,w1,'
pv=imfilter(f,w1'
g2=ph.^2+pv.^2;
Imshow(g2,[]);
prewitt图像锐化'
g3=imfilter(f,w2,'
Imshow(g3,[]);
log图像锐化'
f1=imread('
figure,imshow(f1);
f=imnoise(f1,'
g=ordfilt2(f,5,ones(3,3),'
symmetric'
figure,imshow(g);
g1=medfilt2(f,[33],'
f2=imnoise(g1,'