数字图像处理 实验报告完整版.docx
《数字图像处理 实验报告完整版.docx》由会员分享,可在线阅读,更多相关《数字图像处理 实验报告完整版.docx(24页珍藏版)》请在冰点文库上搜索。
![数字图像处理 实验报告完整版.docx](https://file1.bingdoc.com/fileroot1/2023-5/27/c41a2edb-ae06-4002-963a-b49379870094/c41a2edb-ae06-4002-963a-b493798700941.gif)
数字图像处理实验报告完整版
数字图像处理实验报告(完整版)
正文第一篇:
数字图像处理实验报告(完整版)
数字图像处理
实验一MATLAB数字图像处理初步
一、显示图像
1.利用imread()函数读取一幅图像,假设其名为lily.tif,存入一个数组中;2.利用whos命令提取该读入图像flower.tif的基本信息;3.利用imshow()函数来显示这幅图像;实验结果如下图:
源代码:
>>I=imread('lily.tif')>>whosI>>imshow(I)
二、压缩图像
4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;
5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为lily.jpg;语法:
imwrite(原图像,新图像,‘quality’,q),q取0-100。
6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flily.bmp。
7.用imread()读入图像Sunset.jpg和Winter.jpg;8.用imfinfo()获取图像Sunset.jpg和Winter.jpg的大小;
9.用figure,imshow()分别将Sunset.jpg和Winter.jpg显示出来,观察两幅图像的质量。
其中9的实验结果如下图:
源代码:
4~6(接上面两个)
>>I=imread('lily.tif')
>>imfinfo'lily.tif';
>>imwrite(I,'lily.jpg','quality',2021
>>imwrite(I,'lily.bmp');7~9
>>I=imread('Sunset.jpg');
>>J=imread('Winter.jpg')
>>imfinfo'Sunset.jpg'
>>imfinfo'Winter.jpg'
>>figure
(1),imshow('Sunset.jpg')
>>figure
(2),imshow('Winter.jpg')
三、二值化图像
10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。
实验结果如下图:
源代码:
>>I=imread('lily.tif')>>gg=im2bw(I,0.4);F>>igure,imshow(gg)
原始图像:
四、思考题
(1)简述MatLab软件的特点。
答:
①高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
②具有完备的图形处理功能,实现计算结果和编程的可视化;
③友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
④功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等),为用户提供了大量方便实用的处理工具。
(2)MatLab软件可以支持哪些图像文件格式?
JPEG、JPEG、PCX、TIFF、PNG、GIF、HDF、XWD等等。
(3)说明函数imread的用途格式以及各种格式所得到图像的性质。
imread函数用于读入各种图像文件,其一般的用法为
[X,MAP]=imread(‘filename’,‘fmt’)其中,X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的图像文件(可以加上文件的路径)。
(4)为什么用I=imread(‘lena.bmp’)命令得到的图像I不可以进行算术运算?
Matlab系统默认的算术运算时针对双精度类型(double)的数据,而上述命令产生的矩阵的数据类型是无符号8位,直接进行运算会溢出。
实验二图像的代数运算
一.图像的加法运算
在MATLAB中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。
imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像。
imadd函数的调用格式如下:
Z=imadd(X,Y)
其中,X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。
实验结果如下图:
源代码:
I=imread(‘Sunset.jpg’);J=imread(‘Bluehills.jpg’);K=imadd(I,J);
imshow(K);(两幅图尺寸大小一致)原始图像:
给图像的每一个像素加上一个常数可以使图像的亮度增加。
效果如下:
源代码
>>RGB=imread(‘cameraman.tif’);>>RGB2=imadd(RGB,50);>>subplot(1,2,1);imshow(RGB);>>subplot(1,2,2);imshow(RGB2);
二、图像的减法运算
在MATLAB中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。
imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将这个结果作为输出图像相应的像素值。
imsubtract函数的调用格式如下:
Z=imsubtract(X,Y);
其中,Z是X-Y操作的结果。
实验结果如下图:
源代码
>>rice=imread('cameraman.tif')>>background=imopen(rice,strel('disk',15))>>rice2=imsubtract(rice,background)>>subplot(1,2,1);imshow(rice);>>subplot(1,2,2);imshow(rice2);
三、图像的乘法运算
在MATLAB中,使用immultiply函数实现两幅图像的乘法。
immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作(MATLAB点乘),并将乘法的运算结果作为输出图形相应的像素值。
immulitply函数的调用格式如下:
Z=immulitply(X,Y)其中,Z=X*Y。
实验结果如下图:
源代码
I>>=imread('zhaowei.bmp')>>J=immultiply(I,1.2)>>subplot(1,2,1);imshow(I)>>subplot(1,2,2);imshow(J)
四、图像的除法运算
在MATLAB中使用imdivide函数进行两幅图像的除法。
imdivide函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除),并将得到的结果作为输出图像的相应像素值。
imdivide函数的调用格式如下:
Z=imdivide(X,Y)其中,Z=X/Y。
实验结果如下图:
源代码
>>Rice=imread('cameraman.tif');>>I=double(Rice);>>J=I*0.43+90>>Rice2=uint8(J)>>Ip=imdivide(Rice,Rice2)>>Imshow(Ip,[])
原图像
五、思考题
由图像算术运算的运算结果,思考图像减法运算在什么场合上发挥优势?
答:
使用背景减法进行运动目标检测可以提取出完整的目标图像.可将所得标用于进一步的图像处理工作中。
除去人身体在环境中运动产生的动态区域外.背景减法对其它的动态场景的变化、干扰等特别敏感背景图像获取的理想情况是在场景没有运动因素,最简单背景获取方法是当场景中任何目标时采集一幅图像作为背景图像,但这种固定背景图像的方法.只适合应于外界条件较好的场。
实验三图像增强—空域滤波
一、实验内容与步骤
a)调入并显示原始图像Sample2-1.jpg。
b)利用imnoise命令在图像Sample2-1.jpg上加入高斯(gaussian)噪声
c)利用预定义函数fspecial命令产生平均(average)滤波器
111191111
d)分别采用3x3和5x5的模板,分别用平均滤波器以及中值滤波器,对加入噪声的图像进行处理并观察不同噪声水平下,上述滤波器处理的结果;
e)选择不同大小的模板,对加入某一固定噪声水平噪声的图像进行处理,观察上述滤波器处理的结果。
f)利用imnoise命令在图像Sample2-1.jpg上加入椒盐噪声(salt&pepper)g)重复c)~e)的步骤
h)输出全部结果并进行讨论。
二、实验结果与源代码
源代码
>>I=imread('cameraman.tif');J=imnoise(I,'gauss',0.02);J=imnoise(I,'salt&pepper',0.02);ave1=fspecial('average',3);ave2=fspecial('average',5);K=filter2(ave1,J)/255;L=filter2(ave2,J)/255;M=medfilt2(J,[33]);N=medfilt2(J,[44]);imshow(I);figure,imshow(J);figure,imshow(K);figure,imshow(L);figure,imshow(M);figure,imshow(N);
三、思考题/问答题
(1)简述高斯噪声和椒盐噪声的特点。
高斯噪声是指噪声的概率密度函数服从高斯分布(即正态分布)的一类噪声。
如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。
高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。
高斯白噪声包括热噪声和散粒噪声。
而椒盐噪声是指椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。
椒盐噪声往往由图像切割引起。
(2)结合实验内容,定性评价平均滤波器/中值滤波器对高斯噪声和椒盐噪声的去噪效果?
通过实验可以看出,中值滤波对椒盐噪声的消噪处理效果比较好,但是对高斯噪声的消噪处理效果不是很理想
(3)结合实验内容,定性评价滤波窗口对去噪效果的影响?
对比实验结果可以发现:
发现对于椒盐噪声,中值滤波效果更好。
对于高斯噪声,选用5*5窗口滤波效果好于3*3窗口滤波,但图像模糊程度加重了。
实验四图像分割
一、实验内容与步骤
(1)使用Roberts算子的图像分割实验
调入并显示图像room.tif中图像;使用Roberts算子对图像进行边缘检测处理;Roberts算子为一对模板:
相应的矩阵为:
rh=[01;-10];rv=[10;0-1];这里的rh为水平Roberts算子,rv为垂直Roberts算子。
分别显示处理后的水平边界和垂直边界检测结果;用“欧几里德距离”和“街区距离”方式计算梯度的模,并显示检测结果;对于检测结果进行二值化处理,并显示处理结果;
(2)使用Prewitt算子的图像分割实验
使用Prewitt算子进行内容
(1)中的全部步骤。
(3)使用Sobel算子的图像分割实验
使用Sobel算子进行内容
(1)中的全部步骤。
(4)使用LoG(拉普拉斯-高斯)算子的图像分割实验
使用LoG(拉普拉斯-高斯)算子进行内容
(1)中的全部步骤。
提示1:
处理后可以直接显示处理结果,无须另外计算梯度的模。
提示2:
注意调节噪声的强度以及LoG(拉普拉斯-高斯)算子的参数,观察处理结果。
二、实验结果与源程序
实验结果如下图:
源程序>>f=imread('cameraman.tif');[gv,t1]=edge(f,'sobel','vertical');imshow(gv)[gb,t2]=edge(f,'sobel','horizontal');figure,imshow(gb)w45=[-2-10;-101;012];g45=imfilter(double(f),w45,'replicate');T=0.3*max(abs(g45(:
)));g45=g45>=T;figure,imshow(g45);
三、思考题/问答题
1、评价一下Roberts算子、Prewitt算子、Sobel算子对于噪声条件下边界检测的性能。
Roberts算子边缘定位精度较高,但易丢失一部分边缘,同时由于没经过图像平滑计算,因此不能抑制噪声。
该算子对具有陡峭的低噪声图像响应最好。
Sobel算子很容易在空间上实现,对噪声具有平滑作用,受噪声影响较小,可提供较为精确的边缘方向信息,但同时也会检测出许多伪边缘,检测到的边缘宽度较粗,边缘位置定位精度不高。
Prewitt算子与Sobel算子使用方法一样,都是对图像进行差分和滤波运算,差别只在于使用的模板不一
样,Prewitt算子比Sobel算子运算略微简单。
2、为什么LoG梯度检测算子的处理结果不需要象Prewitt等算子那样进行幅度组合?
LOG算子是根据图像的信噪比来求出检测边缘的最优滤波器。
该方法首先采用高斯函数对图像进行低通平滑滤波,然后采用Laplacia算子进行高通滤波,根据二阶导数的过零点来检测图像的边缘。
因而不需要象Prewitt等算子那样进行幅度组合。
3、实验中所使用的四种算子所得到的边界有什么异同?
Roberts算子检测出的图像轮廓边缘很细,连续性较差,边缘信息有一定丢失,出现的噪点比较多。
Sobel和Prewitt两个算子检测出的边缘效果几乎一致,比Roberts算子的检测结果要好,边缘较为连续,对噪声不敏感,但是线条稍粗,出现了一些伪边缘。
二阶LOG算子检测出来的图像边缘更加连续,边缘也比较细小。
但是由于二阶算子的特性,对噪声比较敏感。
当σ的值越小,平滑的程度就越小,于是会出现零星的假边缘;而σ的值越大,平滑的程度也越大,但是部分真实的边缘会丢失,出现边缘间断现象
实验五形态学运算
一、实验内容与步骤
1.调入并显示图像Plane2.jpg;
2.选取合适的阈值,得到二值化图像Plane2-2.jpg;3.设置结构元素;
4.对得到的二值图像Plane2-2.jpg进行腐蚀运算;5.对得到的二值图像Plane2-2.jpg进行膨胀运算;6.对得到的二值图像Plane2-2.jpg进行开运算;7.对得到的二值图像Plane2-2.jpg进行闭运算;8.将两种处理方法的结果作比较;
二、实验结果与源程序
实验结果如下图:
源程序
I=imread('Sunset.jpg');level=graythresh(I);
%得到合适的阈值bw=im2bw(I,level);
%二值化
SE=strel('square',3);
%设置膨胀结构元素BW1=imdilate(bw,SE);
%膨胀SE1=strel('arbitrary',eye(5));
%设置腐蚀结构元素BW2=imerode(bw,SE1);
%腐蚀BW3=bwmorph(bw,'open');
%开运算BW4=bwmorph(bw,'close');
%闭运算imshow(I);figure,imshow(bw);figure,imshow(BW1);figure,imshow(BW2);figure,imshow(BW3);figure,imshow(BW4);
三、思考题/问答题
1.结合实验内容,评价腐蚀运算与膨胀运算的效果。
腐蚀是一种消除边界点,它使边界向内部收缩,消除小且无意义的物体。
膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。
可以用来填补物体中的空洞。
2.结合实验内容,评价开运算与闭运算的效果。
先腐蚀后膨胀的过程称为开运算。
实验中,开运算能够去除孤立的小点,毛刺和小桥(即连通两块区域的小点),而总的位置和形状不变。
先膨胀后腐蚀称为闭运算。
实验中,闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。
3.腐蚀、膨胀、开、闭运算的适用条件是什么?
由于噪声的影响,图象在阈值化后所得到边界往往是很不平滑的,物体区域具有一些噪声孔,背景区域上散布着一些小的噪声物体。
连续的开和闭运算可以有效地改善这种情况。
有时需要经过多次腐蚀之后再加上相同次数的膨胀,才可以产生比较好的效果。
第二篇:
数字图像处理实验报告
数字图像处理实验
学生姓名:
专业年级:
报告
叶圣红学号:
20217048
09级电子信息工程二班
实验一常用MATLAB图像处理命令
一、实验内容
1、读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字。
实验结果如右图:
代码如下:
Subplot(1,3,1)
i=imread('E:
\数字图象处理.jpg')imshow(i)
title('RGB')Subplot(1,3,2)j=rgb2gray(i)imshow(j)title('灰度')Subplot(1,3,3)k=im2bw(j,0.5)imshow(k)title('二值')
2、对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字。
实验结果如右图:
代码如下:
Subplot(3,2,1)i=imread('E:
\数字图像处理\1.jpg')x=imresize(i,[250,32021imshow(x)title('原图x')Subplot(3,2,2)j=imread(''E:
\数字图像处理\17.jpg')y=imresize(j,[250,32021imshow(y)title('原图y')Subplot(3,2,3)z=imadd(x,y)imshow(z)title('相加结果');Subplot(3,2,4);z=imsubtract(x,y);imshow(z);title('相减结果')Subplot(3,2,5);z=immultiply(x,y);imshow(z);title('相乘结果')Subplot(3,2,6);z=imdivide(x,y);imshow(z);title('相除结果')
3、对一幅图像进行灰度变化,实现图像变亮、变暗和负片效果,在同一个窗口内分成四个子窗口来分别显示,注上文字。
实验结果如右图:
代码如下:
Subplot(2,2,1)i=imread('E:
\数字图像处理\12.jpg')imshow(i)title('原图')Subplot(2,2,2)J=imadjust(i,[],[],3);imshow(J)title('变暗')Subplot(2,2,3)J=imadjust(i,[],[],0.4)imshow(J)title('变亮')Subplot(2,2,4)J=255-iImshow(J)title('变负')
二、实验总结
分析图像的代数运算结果,分别陈述图像的加、减、乘、除运算可能的应用领域。
解答:
图像减运算与图像加运算的原理和用法类似,同样要求两幅图像X、Y的大小类型相同,但是图像减运算imsubtract()有可能导致结果中出现负数,此时系统将负数统一置为零,即为黑色。
乘运算实际上是对两幅原始图像X、Y对应的像素点进行点乘(X.*Y),将结果输出到矩阵Z中,若乘以一个常数,将改变图像的亮度:
若常数值大于1,则乘运算后的图像将会变亮;叵常数值小于是,则图像将会会暗。
可用来改变图像的灰度级,实现灰度级变换,也可以用来遮住图像的某些部分,其典型应用是用于获得掩膜图像。
除运算操作与乘运算操作互为逆运算,就是对两幅图像的对应像素点进行点(X./Y),imdivide()同样可以通过除以一个常数来改变原始图像的亮度,可用来改变图像的灰度级,其典型运用是比值图像处理。
加法运算的一个重要应用是对同一场景的多幅图像求平均值
减法运算常用于检测变化及运动的物体,图像相减运算又称为图像差分运算,差分运算还可以用于消除图像背景,用于混合图像的分离。
实验二图像基本操作
一、实验内容
1.调试运行8倍减采样程序,分析程序,对每条语句给出注释,并显示最终执行结果。
1、调试运行8倍减采样程序,分析程序,对每条语句给出注释,并显示最终执行结果。
a=imread(‘e:
\3.jpg’);%读取图片b=rgb2gray(a);%变为灰度图像
[wid,hei]=size(b);%改变图片大小quartimg=zeros(wid/2+1,hei/2+1);i1=1;j1=1;fori=1:
2:
wid
forj=1:
2:
hei
quartimg(i1,j1)=b(i,j);
j1=j1+1;
end
i1=i1+1;j1=1;endfigureimshow(uint8(quartimg))%显示输出图像
2、显示一幅灰度图像a,改变图像亮度使其整体变暗得到图像b,显示两幅图像的直方图
Subplot(1,2,1);a=imread('E:
\数字图像处理实验\数字图像处理\2021pg');imshow(a);title('a');Subplot(1,2,2);b=imadjust(a,[],[],3);title('b')
显示直方图程序:
Subplot(1,2,1);imhist(a);title('a的直方图')Subplot(1,2,2);imhist(b);title('b的直方图')
3、对图像b进行直方图均衡化,显示结果图像和对应直方图。
Subplot(1,2,1);j=histeq(b);imshow(j);title('b均衡化');Subplot(1,2,2);imhist(j);title('b均衡化后的直方图')均衡化的图像和直方图:
4、读入图像c,执行直方图规定化,使图像a的灰度分布与c大致相同,显示变换后图像及对应直方图。
[counts,x]=imhist(c);Subplot(2,2,1);imshow(a);title('图a');Subplot(2,2,2);c=imread('E:
\数字图像处理\13.jpg');imshow(c);title('图c');Subplot(2,2,3);j=histeq(a,counts);imshow(j);Subplot(2,2,4);imhist(j)
实验三图像变换
一、实验内容
1、对一幅图像进行缩小,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。
i=imread('F:
\数字图象处理\17.jpg');y=rgb2gray(i);subplot(2,2,1);imshow(y);title('原图')j=imresize(y,0.5);subplot(2,2,2);imshow(j);title('缩小图')m=fft2(y);subplot(2,2,3);imshow(abs(log(m)),[]);title('原图傅里叶变化')n=fft2(j);subplot(2,2,4);imshow(abs(log(n)),[]);title('缩小图傅里叶变化')
2、对一幅图像进行旋转,显示原始图像与