1、1 数 字 图 像 处 理 实 验 报 告学 院 : 信 息 工 程 学 院专 业 : 电 子 信 息 工 程学 号 : 姓 名 : 22015 年 6 月 18日目 录实验一 图像的读取、存储和显示2实验二 图像直方图分析6实验三 图像的滤波及增强15实验四 噪声图像的复原19实验五 图像的分割与边缘提取23附录 1 MATLAB简介273实验一 图像的读取、存储和显示一、实验目的与要求1熟悉及掌握在 MATLAB中能够处理哪些格式图像。2熟练掌握在 MATLAB中如何读取图像。3掌握如何利用 MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。4掌握如何在 MATLAB中按照指定要
2、求存储一幅图像的方法。5图像的显示。二、实验原理一幅图像可以被定义为一个二维函数 f(x,y),其中 x和 y是空间(平面)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。灰度是用来表示黑白图像亮度的4一个术语,而彩色图像是由单个二维图像组合形成的。例如,在 RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。图像关于 x和 y坐标以及振幅连续。要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。将坐标值数字化成为取样;将振幅数字化成为量化。采样和量化的过程如图
3、 1所示。因此,当 f的 x、y 分量和振幅都是有限且离散的量时,称该图像为数字图像。三、实验设备(1) PC 计算机(2) MatLab 软件/语言包括图像处理工具箱 (Image Processing Toolbox) (3) 实验所需要的图片 四、实验内容及步骤1利用 imread( )函数读取一幅图像,假设其名为 flower.tif,存入一个数组中;2利用 whos 命令提取该读入图像 flower.tif的基本信息;3利用 imshow()函数来显示这幅图像;4利用 imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;5 利用 imwrite()函数来压缩这幅图象,将其
4、保存为一幅压缩了像素的 jpg文件设为 flower.jpg语法:imwrite(原图像,新图像, quality,q), q取 0-100。6 同样利用 imwrite()函数将最初读入的 tif图象另存为一幅 bmp图像,设为flower.bmp。7用 imread()读入图像:Lenna.jpg 和 camema.jpg;8用 imfinfo()获取图像 Lenna.jpg和 camema.jpg 的大小;9用 figure,imshow()分别将 Lenna.jpg和 camema.jpg显示出来,观察两幅图像的质量。10. 用 im2bw将一幅灰度图像转化为二值图像,并且用 imsh
5、ow显示出来观察图像5的特征。11.将每一步的函数执行语句拷贝下来,写入实验报告,并且将得到第 3、9、10 步得到的图像效果拷贝下来。五、实验源程序clc;clear;close all; I=imread(D:pictureflower.tif);% 读入原图像,tif 格式whos I ; % 显示图像 I 的基本信息imfinfo (D:pictureflower.tif); imwrite(I,D:pictureflower.jpg,quality,50); imwrite(I,D:pictureflower.bmp); % 以位图(BMP)的格式存储图像g=im2bw(I); %
6、将图像转为二值图像imwrite(g,D:pictureflower1.tif);subplot(2,2,1),imshow(I),title(原图(tif 格式);subplot(2,2,2),imshow(D:pictureflower.jpg),title(压缩图(jpg 格式);subplot(2,2,3),imshow(D:pictureflower.bmp),title(位图(BMP 格式);subplot(2,2,4),imshow(g),title(二值图);六、实验结果6中中 (tif中中 ) 中中中 (jpg中中 )中中 (BMP中中 ) 中中中7、实验心得通过本次实验可以
7、熟练的运用 MATLAB 编程软件。7实验二 图像直方图分析8一实验目的1了解MATLAB的操作环境和基本功能。2掌握MATLAB中图像增强与平滑的函数的使用方法。3加深理解图像增强与平滑的算法原理。二、实验内容(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。 (可将每段程序保存为一个.m文件)1直方图均衡化2直接灰度变换3空域平滑滤波(模糊、去噪)4空域锐化滤波(二)采用MATLAB底层函数编程实现1灰度变换之动态范围扩展假定原图像 f(x, y)的灰度范围为 a, b,希望变换后图像 g(x, y)的灰
8、度范围扩展至 c, d,则线性变换可表示为: cyxfabcyxg),(),(用MATLAB底层函数编程实现上述变换函数。观察图像 pout.tif的灰度直方图,选择合适的参数 a, b、 c, d对图像pout.tif进行灰度变换,以获得满意的视觉效果。2非锐化掩蔽和高斯滤波从原图像中减去其非锐化(平滑过的)图像的过程称为非锐化掩蔽,其基本步骤为:对原图像进行平滑滤波得到模糊图像 ;(,)fxy9从原图像中减去模糊图像,产生的差值图像称为模板 ;(,)maskgxy将模板加到原图像上,得到锐化后的图像 。 即,(,)xy(,)(,) -(,)maskgxyfxyf,1maskfgxyk;用M
9、ATLAB函数编程实现上述功能。三、实验设备与软件 1计算机;2MATLAB6.5 及以上;四、实验源程序(一)1直方图均衡化clc;clear all; close all I=imread(pout.tif); subplot(2,3,1);imshow(I);title(原图);subplot(2,3,2);imhist(I); % 显示原图的直方图title(原图的直方图);I2,T=histeq(I); %原图进行均衡化subplot(2,3,3);imshow(I2); %显示均衡化后图 title(均衡化后的图);subplot(2,3,4);imhist(I2); %显示原图均
10、衡化后的直方图title(原图均衡化后的直方图);10subplot(2,3,5);plot(0:255)/255,T); % 绘制均衡化函数图title(均衡化函数图);imwrite(I2, D:picture1pout.png); imfinfo(D:picture1pout.png)%显示写入图的信息2直接灰度变换clc;clear all; close allI=imread(cameraman.tif);subplot(2,3,1),imshow(I),title(原图(cameraman);J=imadjust(I,0 0.2,0.5 1);subplot(2,3,2),imsh
11、ow(J),title(图cameraman调整灰度值后的图 );X,MAP = imread(forest.tif);%X为图像数据矩阵,MAP为颜色表数据矩阵subplot(2,3,3),imshow(X,MAP),title(原图(forest);I2=ind2gray(X,MAP);J2=imadjust(I2,0.5);J3=imadjust(I2,1.5);subplot(2,3,4),imshow(I2),title(forest的灰度图);subplot(2,3,5),imshow(J2),title(forest调整图像灰度值后明亮输出的图);subplot(2,3,6),i
12、mshow(J3),title(forest调整图像灰度值后灰暗输出的图);3空域平滑滤波(模糊、去噪)clc;clear all; close allI=imread(eight.tif);h1=ones(3,3)/9;h2=ones(5,5)/25;I1=imfilter(I,h1);%用3*3的方阵(元素值为0.11)过滤原图I2=imfilter(I,h2);%用5*5的方阵(元素值为0.04)过滤原图figure(1);subplot(2,2,1),imshow(I), title(原图);subplot(2,2,2),imshow(I1),title(用3*3 的方阵(元素值为 0
13、.11)过滤原图);subplot(2,2,3),imshow(I2),title(用5*5 的方阵(元素值为 0.04)过滤原图);11J1=imnoise(I,gaussian,0,0.005);% 加入高斯(Gaussian)噪声J2=imnoise(I,salt % 加入椒盐噪声K1 = imfilter(J1,fspecial(average,3);% 对J1进行平均值平滑滤波K2 = imfilter(J2,fspecial(average,3);% 对J2进行平均值平滑滤波figure(2);subplot(2,2,1), imshow(J1),title(加入高斯噪声);sub
14、plot(2,2,2), imshow(J2),title(加入椒盐噪声 );subplot(2,2,3), imshow(K1),title(对加入高斯噪声的图进行平均值平滑滤波);subplot(2,2,4), imshow(K2),title(对加入椒盐噪声的图进行平均值平滑滤波);K3 = medfilt2(J1,3 3);% 对J1 进行中值滤波K4 = medfilt2(J2,3 3);% 对J2 进行中值滤波figure(3);subplot(2,2,1), imshow(J1),title(加入高斯噪声);subplot(2,2,2), imshow(J2),title(加入椒
15、盐噪声 );subplot(2,2,3), imshow(K3),title(对加入高斯噪声的图进行中值滤波);subplot(2,2,4), imshow(K4),title(对加入椒盐噪声的图进行中值滤波);4空域锐化滤波clc;clear all; close allI = imread(moon.tif);w=fspecial(laplacian,0);%拉普拉斯算子w1=1,1,1;1,-8,1;1,1,1;%新算子(w1)I1= imfilter(I,w, replicate);%拉普拉斯算子对原图锐化滤波subplot(2,4,1),imshow(I), title(原图);su
16、bplot(2,4,2),imshow(I1), title(拉普拉斯算子对原图锐化滤波图);f = im2double(I);%把原图的数据类型转换为双精度浮点类型(图不变)f1= imfilter(f,w,replicate);%拉普拉斯算子对图f锐化滤波subplot(2,4,4),imshow(f1,), title(拉普拉斯算子对 f锐化滤波图);f2= imfilter(f,w1, replicate);%新算子(w1)对图f锐化滤波12subplot(2,4,5),imshow(f1,), title(新算子(w1)对 f锐化滤波图);f4 = f-f1;%图f减去其锐化滤波(拉
17、普拉斯算子)后的图f8 = f-f2;%图f减去其锐化滤波(新算子( w1) )后的图subplot(2,4,3),imshow(f),title(原图的数据类型变为双精度浮点型即图 f);subplot(2,4,6),imshow(f4),title(图 f减去其锐化滤波(拉普拉斯算子)后的图 );subplot(2,4,8),imshow(f8),title(图 f减去其锐化滤波(新算子( w1) )后的图);(二)1灰度变换之动态范围扩展clc;clear all; close allI=imread(pout.tif);%数据为240行16列的矩阵subplot(2,2,1),imsh
18、ow(I),title(原图(pout);I1=double(I)./double(100);%对原图数据进行处理J=0.625.*(I1-0.1)+0.4;%a=0.1,b=0.9,c=0.4,d=0.9调整原图的灰度值变明亮subplot(2,2,2),imshow(J),title(图pout调整灰度值后的图 );subplot(2,2,3),imhist(I1),title(原图的直方图); % 显示原图的直方图subplot(2,2,4),imhist(J),title(pout调整灰度值后的直方图); % 显示pout调整灰度值后的直方图2非锐化掩蔽和高斯滤波clc;clear a
19、ll; close allI=imread(pout.tif);J=imfilter(I,fspecial(average,3);% 对 I 进行平均值平滑滤波subplot(2,2,1),imshow(I),title(原图);subplot(2,2,2),imshow(J),title(对原图进行平均值平滑滤波得到模糊图像 J);M=I-J;%从原图像 I 中减去模糊图像 J,产生的差值图像 M 称为模板N=30*M+I;%将模板 M 加到原图像 I 上,得到锐化后的图像 N subplot(2,2,3),imshow(M),title(I 减 J 产生的差值图像 M);subplot(2
20、,2,4),imshow(N),title(M 的 30 倍加 I 得到的锐化后的图像 N);13五、实验结果(一)1直方图均衡化中中050010001500中中中中中中0 100 200中中中中中中050010001500中中中中中中中中中中0 100 200 0 0.5 100.51 中中中中中中2 直接灰度变换14中中(cameraman) 中cameraman中中中中中中中中 中中(forest)forest中中中中 forest中中中中中中中中中中中中中中 forest中中中中中中中中中中中中中中对于imadjust(I,low_in high_in,low_out high_out
21、,gamma)函数,gamma大于1图像比原图像增强,小于1,灰度比图像小,有模糊感,图像不够清晰.3空域平滑滤波(模糊、去噪)15中中 中3*3中中中中中中中中0.11中中中中中 中5*5中中中中中中中中0.04中中中中中 中中中中中中 中中中中中中 中中中中中中中中中中中中中中中中中中 中中中中中中中中中中中中中中中中中中 16中中中中中中 中中中中中中 中中中中中中中中中中中中中中中 中中中中中中中中中中中中中中中 4空域锐化滤波中中 中中中中中中中中中中中中中中 中中中中中中中中中中中中中中中中中 f 中中中中中中中 f中中中中中中中中中w1中中 f中中中中中 中 f中中中中中中中中中
22、中中中中中中中中中 中 f中中中中中中中中中中中中w1中中中中中使用空域滤波使图像对比度增大,并且w8=1,1,1;1,-8,1;1,1,1算子增强效果更明显(二)1灰度变换之动态范围扩展17中中(pout) 中pout中中中中中中中中 0200040006000中中中中中中0 0.5 1020004000pout中中中中中中中中中中0 0.5 12非锐化掩蔽和高斯滤波18中中 中中中中中中中中中中中中中中中中中中JI中J中中中中中中中M M中30中中I中中中中中中中中中N六实验心得通过本次实验对高斯噪声与椒盐噪声有了更清楚的认识,也学会如何用平滑滤波,锐化滤波,高斯滤波处理图像,学到了很多新
23、知识.实验三 图像的滤波及增强一、 实验目的 1进一步了解 MatLab软件/语言,学会使用 MatLab对图像作滤波处理,使学生有机会掌握滤波算法,体会滤波效果。2了解几种不同滤波方式的使用和使用的场合,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。3 熟悉傅立叶变换的基本性质;4 熟练掌握 FFT变换方法及应用;二、实验内容与步骤(1)模板滤波a) 调入并显示原始图像 Sample2-1.jpg 。b) 利用 imnoise 命令在图像 Sample2-1.jpg 上加入高斯(gaussian) 噪声 19c)利用预定义函数 fspecial 命令产生平均(average)滤波器
24、 19d)分别采用 3x3和 5x5的模板,分别用平均滤波器以及中值滤波器,对加入噪声的图像进行处理并观察不同噪声水平下,上述滤波器处理的结果; e)选择不同大小的模板,对加入某一固定噪声水平噪声的图像进行处理,观察上述滤波器处理的结果。f)利用 imnoise 命令在图像 Sample2-1.jpg 上加入椒盐噪声(salt clear all; close allI=imread(cameraman.tif);J = imnoise(I,gauss,0.02); %添加高斯噪声,叠加密度为 0.02ave1=fspecial(average,3); %产生 33 的均值模板ave2=fsp
25、ecial(average,5); %产生 55 的均值模板K = filter2(ave1,J)/255; %均值滤波 33L = filter2(ave2,J)/255; %均值滤波 55M = medfilt2(J,3 3); %中值滤波 33 模板N = medfilt2(J,5 5); %中值滤波 55 模板subplot(2,3,1),imshow(I);title(原图);subplot(2,3,2),imshow(J);title(添加高斯噪声图 J);subplot(2,3,3),imshow(K);title(对 J 均值滤波 33);subplot(2,3,4),imsh
26、ow(L);title(对 J 均值滤波 55);subplot(2,3,5),imshow(M);title(对 J 中值滤波 33);subplot(2,3,6),imshow(N);title(对 J 中值滤波 55);J1 = imnoise(I,salt %添加椒盐噪声 ,叠加密度为 0.02K1 = filter2(ave1,J1)/255; %均值滤波 33L1 = filter2(ave2,J1)/255; %均值滤波 55M1 = medfilt2(J1,3 3); %中值滤波 33 模板N1= medfilt2(J1,5 5); %中值滤波 55 模板figure(2);s
27、ubplot(2,3,1),imshow(I);title(原图);subplot(2,3,2),imshow(J1);title(添加椒盐噪声 J1);subplot(2,3,3),imshow(K1);title(对 J1 均值滤波 33);subplot(2,3,4),imshow(L1);title(对 J1 均值滤波 55);subplot(2,3,5),imshow(M1);title(对 J1 中值滤波 33);subplot(2,3,6),imshow(N1);title(对 J1 中值滤波 55);21(2)频域滤波clc;clear all; close allI=imre
28、ad(cameraman.tif); %读入原图像文件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; %归一化f1=ifft2(A);%用 Fourier 系数的幅度进行 Fourier 反变换;f2=ifft2(angle(fftI);%用 Fourier 系数的相位进行 Fourier
29、 反变换;subplot(2,2,2),imshow(A),title(原图像的频谱);% 显示原图像的频谱subplot(2,2,1),imshow(I),title(原图);subplot(2,2,3),imshow(f1,),title(用 Fourier 系数的幅度进行 Fourier 反变换后的图);subplot(2,2,4),imshow(f2,),title(用 Fourier 系数的相位进行 Fourier 反变换后的图);五实验结果(1)模板滤波22中中 中中中中中中中J 中J中中中中33中J中中中中55 中J中中中中33 中J中中中中55中中 中中中中中中J1 中J1中中
30、中中33中J1中中中中55 中J1中中中中33 中J1中中中中5523(2)频域滤波中中中中中中中中中Fourier中中中中中中中Fourier中中中中中中 中Fourier中中中中中中中Fourier中中中中中中6实验心得通过这次实验了解了高斯噪声和椒盐噪声的特点。高斯噪声完全由其时变平均值和两瞬时的协方差函数来确定,若噪声为平稳的,则平均值与时间无关,而协方差函数则变成仅和所考虑的两瞬时之差有关的相关函数,它在意义上等效于功率谱密度。高斯噪声可以是大量独立的脉冲所产生的,从而在任何有限时间间隔内,这些脉冲中的每一个脉冲值与所有脉冲值的总和相比都可忽略不计。3 实际上热噪声、散弹噪声及量子噪
31、声都是高斯噪声。椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起。24实验四 噪声图像的复原一、实验目的251、熟悉并掌握 MATLAB图像处理工具箱的使用;2、理解并掌握常用的图像的恢复和增强技术。二、实验内容及步骤1、产生运动模糊图像,运用维纳滤波进行图像恢复,显示结果。2、利用 MATLAB实现频域滤波频域滤波分为低通滤波和高通滤波两类,对应的滤波器分别为低通滤波器和高通滤波器。频域低通过滤的基本思想:G(u,v)=F(u,v)H(u,v)F(u,v)是需要钝化图像的傅立叶变换形式,H(u,v)是选取的一个低通过滤器变换函数,G(u,v)
32、是通过 H(u,v)减少 F(u,v)的高频部分来得到的结果,运用傅立叶逆变换得到钝化后的图像。理想地通滤波器(ILPF)具有传递函数: 01(,)(,)0ifDuvHuv其中, 为指定的非负数, 为(u,v)到滤波器的中心的距离。0D(,)的点的轨迹为一个圆。(,)uvn阶巴特沃兹低通滤波器(BLPF)(在距离原点 处出现截至频率)的传递函数为0D201(,)(,)nHvuv与理想地通滤波器不同的是,巴特沃兹率通滤波器的传递函数并不是在 处突然0D不连续。高斯低通滤波器(GLPF)的传递函数为 22),(),(vuDeH其中, 为标准差。相应的高通滤波器也包括:理想高通滤波器、n 阶巴特沃兹
33、高通滤波器、高斯高通26滤波器。给定一个低通滤波器的传递函数 ,通过使用如下的简单关系,可以获(,)lpHuv得相应高通滤波器的传递函数: 1hpl三实验所用仪器1计算机;2MATLAB 程序;3移动式存储器(U 盘等) ;4记录用的笔、纸。四实验源程序1、产生运动模糊图像,运用维纳滤波进行图像恢复,显示结果。i=imread(football.jpg);I=rgb2gray(i);I = im2double(I); %模拟运动模糊LEN = 21;THETA = 11;PSF = fspecial(motion, LEN, THETA); blurred = imfilter(I, PSF,
34、 conv, circular);%恢复图像wnr2 = deconvwnr(blurred, PSF); subplot(1,2,1);imshow(blurred);title(运动模糊图像) subplot(1,2,2);imshow(wnr2);title(恢复图像)2、利用 MATLAB实现频域滤波clc;clear all, close all;27f=imread(cameraman.tif);F=fft2(f); %对图像进行傅立叶变换%对变换后图像进行对数变化,并对其坐标平移,使其中心化S=fftshift(log(1+abs(F);S=gscale(S); %将频谱图像标度
35、在 0-256 的范围内subplot(3,3,1),imshow(S),title(原图频谱图); %显示频谱图像h=fspecial(sobel); %产生空间sobel模版freqz2(h) %查看相应频域滤波器的图像PQ=paddedsize(size(f); %产生滤波时所需大小的矩阵H=freqz2(h,PQ(1),PQ(2); %产生频域中的sobel滤波器H1=ifftshift(H); %重排数据序列,使得原点位于频率矩阵的左上角subplot(3,3,2),imshow(abs(H),),title(频域中的sobel滤波器);%以图形形式显示滤波器subplot(3,3,
36、3),imshow(abs(H1),),title(重排数据序列后的sobel滤波器);gs=imfilter(double(f),h); %用模版 h 进行空域滤波gf=dftfilt(f,H1); %用滤波器对图像进行频域滤波subplot(3,3,4),imshow(gs,),title(用模版 h 对图像进行空域滤波); subplot(3,3,5),imshow(gf,),title(用滤波器对图像进行频域滤波);subplot(3,3,6),imshow(abs(gs),),title(图像用模版 h 空域滤波后的模值);subplot(3,3,7),imshow(abs(gf),
37、),title(图像滤波器频域滤波后的模值 );f=imread(cameraman.tif); %读取图片PQ=paddedsize(size(f); %产生滤波时所需大小的矩阵D0=0.05*PQ(1); %设定高斯高通滤波器的阈值H=hpfilter(gaussian,PQ(1),PQ(2),D0); %产生高斯高通滤波器g=dftfilt(f,H); %对图像进行滤波subplot(3,3,8),imshow(f),title(原图); %显示原图像subplot(3,3,9),imshow(g,),title(对原图进行滤波后的图);% 显示滤波后图像28五实验结果1、产生运动模糊图
38、像,运用维纳滤波进行图像恢复,显示结果。中中中中中中 中中中中2、利用 MATLAB实现频域滤波-1 01-1010510FxFyMagnitude中中中中sobel中中中 中中中中中中中中sobel中中中中中中h中中中中中中中中中 中中中中中中中中中中中中中 中中中中中h中中中中中中中中中中中中中中中中中中中中中 中中 中中中中中中中中中中六实验心得29通过这次试验认识到在图像恢复中,需建立造成图像质量下降的退化模型,然后运用相反过程来恢复原来图像,并运用一定准则来判定是否得到图像的最佳恢复。在遥感图像处理中,为消除遥感图像的失真、畸变,恢复目标的反射波谱特性和正确的几何位置,通常需要对图像进行恢复处理,包括辐射校正、大气校正、条带噪声消除、几何校正等内容。30实验五 图像的分割与边缘提取一实验目的及要求1利用 MATLAB研究图像分割与边缘检测的常用算法原理;2掌握 MATLAB图像域值分割与边缘检测函数的使用方法;3了解边缘检测的算法和用途,比较 Sobel、Prewitt、Canny 等算子边缘检测的差异。二、实验内容(一)1图像阈值分割2边缘检测(二)利用 MATLAB熟悉并验证其它图像分割方法(三)采用 MATLAB编程实现自动全局阈值算法,对图像rice.tif进行二值化分割算法步骤:1)选取一个的初始估计值 T;