数字图像处理实验报告-线性灰度变换-图像几何变换-频域图像增强技术-图像分割
时间:2020-11-11 16:47:58 来源:勤学考试网 本文已影响 人
线性灰度变换
实验目的
1结合实例学习如何在视频显示程序中增加图像处理算法;
2理解和掌握图像的线性变换和直方图均衡化的原理和应用;
3了解平滑处理的算法和用途,学习使用均值滤波、中值滤波和拉普拉斯锐化进行图像增强处理的程序设计方法;
4 了解噪声模型及对图像添加噪声的基本方法。
实验原理
1 灰度线性变换就是将图像中所有点的灰度按照线性灰度变换函数进行变换。
2 直方图均衡化通过点运算将输入图像转换为在每一级上都有相等像素点数的输出图像。按照图像概率密度函数PDF的定义:
通过转换公式获得:
3 均值(中值)滤波是指在图像上,对待处理的像素给定一个模板,该模板包括了其周围的临近像素。将模板中的全体像素的均值(中值)来代替原来像素值的方法。
4 拉普拉斯算子如下:
拉普拉斯算子首先将自身与周围的8个像素相减,表示自身与周围像素的差异,再将这个差异加上自身作为新像素的灰度。
实验步骤
1 启动MATLAB程序,对图像文件分别进行灰度线性变换(参考教材57页,例4.1)、直方图均衡化(参考教材64页,例4.6)、均值滤波(参考教材69页,例4.9)、中值滤波(参考教材73页,例4.11)和梯度锐化操作(参考教材76页,例4.12)。添加噪声,重复上述过程观察处理结果。
2记录和整理实验报告:
对图像文件进行灰度线性变换
(1)对图像pout.tif,将其小于30的灰度值不变,将30到150的灰度值拉伸到30到200,同时压缩150到255的灰度值到200到255之间。
I=imread('pout.tif');
imshow(I);
I=double(I);
[M,N]=size(I);
for i=1:M
for j=1:N
if I(i,j)<=30
I(i,j)=I(i,j);
elseif I(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
figure(2);imshow(uint8(I
(2)对图像pout.tif添加高斯噪声后进行灰度值线性变换
J=imread('pout.tif');
I=imnoise(J,'gaussian',0,0.01);
imshow(I);
I=double(I);
[M,N]=size(I);
for i=1:M
for j=1:N
if I(i,j)<=30
I(i,j)=I(i,j);
elseif I(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
figure(2);imshow(uint8(I));
对图像文件进行直方图均衡化:
(1)原图
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)
(2)加入高斯噪声
J=imread('circuit.tif');
I=imnoise(J,'gaussian',0,0.01);
figure
subplot(221);imshow(I)
subplot(222);imhist(I)
I1=histeq(I);
figure
subplot(221);imshow(I1)
subplot(222);imhist(I1)
均值滤波
(1)原图
I=imread('tire.tif');
[M,N]=size(I);
II1=zeros(M,N);
for i=1:16
II(:,:,i)=imnoise(I,'gaussian',0,0.01);
II1=II1+double(II(:,:,i));
if or(or(i==1,i==4),or(i==8,i==16));
figure;
imshow(uint8(II1/i));
end
end
(2)加高斯噪声
J=imread('tire.tif');
I=imnoise(J,'gaussian',0,0.01);
[M,N]=size(I);
II1=zeros(M,N);
for i=1:16
II(:,:,i)=imnoise(I,'gaussian',0,0.01);
II1=II1+double(II(:,:,i));
if or(or(i==1,i==4),or(i==8,i==16));
figure;
imshow(uint8(II1/i));
end
end
4.中值滤波:
源程序和结果:
I=imread('hua.jpg');
J=imnoise(I,'salt & pepper',0.02);
subplot(231),imshow(I);title('原始图像');
subplot(232),imshow(J);title('添加椒盐噪声图像')
k1=medfilt2(J);
k2=medfilt2(J,[5,5]);
k3=medfilt2(J,[7,7]);
k4=medfilt2(J,[9,9]);
subplot(233),imshow(k1);title('3x3模板中值滤波')
subplot(234),imshow(k2);title('5x5模板中值滤波')
subplot(235),imshow(k3);title('7x7模板中值滤波')
ubplot(236),imshow(k4);title('9x9模板中值滤波') ') s
梯度锐化操作:
(1)原图
I=imread('cameraman.tif');
subplot(131),imshow(I)
H=fspecial('Sobel’);
H=H';
TH=filter2(H,I);
subplot(132),imshow(TH,[]);
H=H';
TH=filter2(H,I);
subplot(133),imshow(TH,[])
(2)加入高斯噪声
J=imread('cameraman.tif');
I=imnoise(J,'gaussian',0,0.01)
subplot(131),imshow(I)
H=fspecial('Sobel');
H=H';
TH=filter2(H,I);
subplot(132),imshow(TH,[]);
H=H';
TH=filter2(H,I);
subplot(133),imshow(TH,[])
思考题
设定不同的斜率值和截距,显示效果会怎样?
不同的斜率和截距会对图像的不同部分进行增强或减弱,将会改变图像的对比度。
2.直方图均衡化是什么意思?它的主要用途是什么?
直方图均衡化就是经过一个点变换使不均匀的直方图变为均衡分布的直方图,增加图像的灰度范围和 增强图像对比度
3. 均值(中值)滤波的模板大小对处理效果有什么影响?
中值滤波所选的模版越大其滤波效果(去除噪声)越好,但是原始图像中的有效部也跟着被滤波,但其边缘不会模糊,即在滤波的同时保持了图像的细节清晰。
图像几何变换
实验目的
1结合实例学习如何在视频显示程序中增加图像处理算法;
2理解和掌握图像的平移、垂直镜像变换、水平镜像变换、缩放和旋转的原理和应用;
实验原理
1 初始坐标为(, )的点经过平移(,),坐标变为(,),两点之间的关系为:,以矩阵形式表示为:
2 图像的镜像变换是以图象垂直中轴线或水平中轴线交换图像的变换,分为垂直镜像变换和水平镜像变换,两者的矩阵形式分别为:
3 图像缩小和放大变换矩阵相同:
当时,图像缩小;时,图像放大。
4 图像旋转定义为以图像中某一点为原点以逆时针或顺时针方向旋转一定角度。其变换矩阵为:
该变换矩阵是绕坐标轴原点进行的,如果是绕一个指定点()旋转,则现要将坐标
系平移到该点,进行旋转,然后再平移回到新的坐标原点。
实验步骤
1 启动MATLAB程序,对图像文件分别进行生成、失真和校正;(参考教材115页,例5.8,例5.9)
2 记录和整理实验报告
affine变换
f=checkerboard(24);
figure(1);
imshow(f);
s=0.7;
theta=pi/6;
T=[s*cos(theta) s*sin(theta) 0
-s*sin(theta) s*cos(theta) 0
0 0 1];
tform=maketform('affine',T);
g1=imtransform(f,tform,'nearest');
figure(2);imshow(g1);
g2=imtransform(f,tform);
figure(3);imshow(g2);
g3=imtransform(f,tform,'FillValue',0.5);
figure(4);imshow(g3);
2.失真校正:
f = checkerboard(24);
figure(1);
imshow(f);
s=0.7;
theta=pi/6;
t=[ s*cos(theta) s*sin(theta) 0
-s*sin(theta) s*cos(theta) 0
0 0 1];
tform=maketform('affine',t);
g1=imtransform(f,tform,'nearest');
figure(2);imshow(g1);
cpselect(g1,f);
tform=cp2tform(input_points,base_points,'projective');
gp=imtransform(g1,tform,'XData',[1 256],'YData',[1 256]);
figure(3);imshow(gp);
校正后图像:
频域图像增强技术
实验目的
1了解图像变换的意义和手段;
2熟悉傅里叶变换的基本性质;
3热练掌握FFT方法及应用;
4通过实验了解二维频谱的分布特点;
5通过本实验掌握利用MATLAB编程实现数字图像的傅立叶变换及滤波锐化和复原处理;
6 了解理想、巴特沃兹、高斯等不同滤波器的结构及滤波效果。
实验原理
1应用傅立叶变换进行图像处理
傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。通过实验培养这项技能,将有助于解决大多数图像处理问题。对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。
2傅立叶(Fourier)变换的定义
对于二维信号,二维Fourier变换定义为:
二维离散傅立叶变换为:
图像的傅立叶变换与一维信号的傅立叶变换变换一样,有快速算法,具体参见参考书目,有关傅立叶变换的快速算法的程序不难找到。实际上,现在有实现傅立叶变换的芯片,可以实时实现傅立叶变换。
3利用MATLAB软件实现数字图像傅立叶变换的程序:
(38页)
I=imread(‘原图像名.gif’); %读入原图像文件
imshow(I); %显示原图像
fftI=fft2(I); %二维离散傅立叶变换
sfftI=fftshift(fftI); %直流分量移到频谱中心
RR=real(sfftI); %取傅立叶变换的实部
II=imag(sfftI); %取傅立叶变换的虚部
A=sqrt(RR.^2+II.^2);%计算频谱幅值
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225;
%归一化
figure; %设定窗口
imshow(A); %显示原图像的频谱
实验步骤
1打开计算机,安装和启动MATLAB程序;程序组中“work”文件夹中应有待处理的图像文件;
2利用MatLab工具箱中的函数编制FFT频谱显示的函数;
3 a).调入、显示“实验一”获得的图像;图像存储格式应为“.gif”;
b)对这三幅图像做FFT并利用自编的函数显示其频谱;
c)讨论不同的图像内容与FFT频谱之间的对应关系。
4 对频谱分别进行巴特沃兹和理想低通滤波,比较效果(参考教材82页,例4.13,例4.14)
5 记录和整理实验报告
J=imread('rice.jpg');
subplot(131);imshow(J);title('原始图像')
J=double(J);
f=fft2(J);
g=fftshift(f);
subplot(132);imshow(log(abs(g)),[]),color(jet(64));title('傅里叶频谱')
[M,N]=size(f);
n1=floor(M/2);
n2=floor(N/2);
% d0=5,15,45,65
d0=5;
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2);
if d<=d0
h=1;
else
h=0;
end
g(i,j)=h*g(i,j);
end
end
g=ifftshift(g);
g=uint8(real(ifft2(g)));
subplot(133);
imshow(g);title('经理想低通滤波后的图像')
I=imread('rice.tif');
J=imnoise(I,'salt & pepper',0.02);
subplot(121);imshow(J);
title('含有椒盐噪声的图像')
J=double(J);f=fft2(J);
g=fftshift(f);
[M,N]=size(f);
n=3;
d0=20
n1=floor(M/2)
n2=floor(N/2)
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2)
h=1/(1+(d/d0)^(2*n));
g(i,j)=h*g(i,j);
end
end
g=ifftshift(g);
g=uint8(real(ifft2(g)));
subplot(122);
imshow(g);title('经巴特沃斯低通滤波后的图像')
图像分割
实验目的
理解和掌握图像分割的基本理论和算法,练习使用形态学、区域、边界和阀值的方法结合图像增强复原的相关知识点对图像进行分割处理;
实验原理
1 膨胀和腐蚀是二值形态学的基本操作,其中膨胀是是将与目标区域的背景点合并到该目标物中,使目标物边界向外部扩张的处理;而腐蚀则是一种消除连通域的边界点,使边界向内收缩的处理。贴标签是对不同连通域区分和标记的基本算法。
两者数学表达如下:
膨胀:
腐蚀:
2图象分割是按照某些特性(如灰度级,频谱,颜色,纹理等)将图象划分成一些区域,在这些区域内其特性是相同的或者说是均匀的,两个相邻区域彼此特性则是不同的,其间存在着边缘或边界。按照使用图像的特点可以分为两类:
利用区域间灰度不连续性――基于边界检测
利用区域内灰度的相似性――基于区域分割
实验步骤
1打开计算机,安装和启动MATLAB程序;程序组中“work”文件夹中应有待处理的图像文件;
2对于血细胞图像
a).对图像进行去噪、增强处理;
b)运用全局阀值进行二值化(参考教材244页,例9.7, 例9.8, 例9.9);
c)用膨胀腐蚀等形态学方法将血细胞分成不同的连通域(参考教材284页,例10.9, 例10.10),并使用贴标签的方式对连通域进行统计和标记。
记录和整理实验报告。
实验内容
运用全局阀值进行二值化
f=imread('rice.jpg');
subplot(1,2,1)
imshow(f);
title('原始图像');
f=double(f);
T=(min(f(:))+max(f(:)))/2;
done=false;
i=0
while~done
r1=find(f<=T);
r2=find(f>T);
Tnew=(mean(f(r1))+mean(f(r2)))/2;
done=abs(Tnew-T)<1
T=Tnew;
i=i+1;
end
f(r1)=0;
f(r2)=1;
subplot(1,2,2)
imshow(f);
title('迭代阀值二值化图像');
f=imread('pout.tif');
subplot(2,2,1)
imshow(f);
title('原始图像');
T=graythresh(f);
g=im2bw(f,T);
subplot(2,2,2);
imshow(g);
title('Otsu方法二值化图像');
f=imread('o.gif');
subplot(2,2,1)
imshow(f);
title('(a)原始图像');
subplot(2,2,2);
f=double(f);
hv=fspecial('prewitt');
hh=hv.';
gv=abs(imfilter(f,hv,'replicate'));
gh=abs(imfilter(f,hv,'replicate'));
g=sqrt(gv.^2+gh.^2);
subplot(2,2,2);
L=watershed(g);
wr=L==0;
imshow(wr);
title('(b)分水岭');
f(wr)=255;
subplot(2,2,3);
imshow(uint8(f));
title('(c)分割结果');
rm=imregionalmin(g);
subplot(2,2,4);
imshow(rm);
title('(d)局部极小值');
用膨胀腐蚀等形态学方法将血细胞分成不同的连通域
I=imread('789.jpg');
subplot(121);imshow(I);title('原始图像')
se=strel('ball',8,8);
I2=imdilate(I,se);
subplot(122);imshow(I2);title('膨胀后的图像')
I=imread('tire.tif');
subplot(121);imshow(I);title('原始图像')
se=strel('ball',8,8);
I2=imerode(I,se);
subplot(122);imshow(I2);title('腐蚀操作后的图像')
四·思考题
除了形态学方法用其他方法如何实现图像分割?
阀值分割:割的经典方法是基于灰度阈值的分割方法,它通过设 置阈值,把像素点按灰度级分级分若干类,从而实现图像分割。
区域分割:利用的是图像的空间性质,认为分割出来的属于同一区域的像素应具有相似的性质。
运动分割:研究对象通常是图像序列,图像序列的每一幅为一帧,不同时刻采集的多帧图像中包含了存在于相机与景物之间的相对运动信息。
图像预处理的作用是什么?
去除噪声,增强图像,以得到对具体应用来说视觉效果更好更有用的图像