logo资料库

MATLAB图像处理教程.docx

第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
资料共22页,剩余部分请下载后查看
前 言 图像是一种重要的信息源,图像处理的最终目的就是要帮助人类理解信息的内涵.数字图像处 理技术的研究内容涉及光学系统,微电子技术,计算机科学,数学分析等领域,是一门综合性很 强的边缘学科.随着计算机的迅猛发展,图像处理技术已经广泛应用于各个领域. "数字图像处理"课程内容主要包括利用计算机对图像信息进行图像采集,图像变换,图像增强 与恢复,图像分割,图像分析与理解,图像压缩,图像传输等各种处理的基本理论,典型方法和实 用技术. 通过本课程的学习,可使学生掌握有关图像处理与图像分析的基本概念,基础理论,实用技术 和典型方法.通过该系列实验教学与实践,使学生了解和掌握利用各种图像采集设备__图像扫 描仪,数码照相机,录像机,数码摄像机等获取多种格式的静态,动态图像数据的方法及手段,了 解图像增强,图像分割,图像理解和分析算法的物理意义;了解图像传输,图像编码等相关技术 的基本原理,软/硬件构成以及典型的应用;此外对图像远程传输,存贮等网络流媒体远程通信 技术,数据库管理与维护,超文本系统等方法也进行必要的了解,为将来的研究和应用打下良 好的基础. 应用于图像处理的计算机软件技术平台很多,如 VC++,MATLAB 等.本实验指导书选用 MATLAB 做实验平台,MATLAB 是一种基于向量(数组)而不是标量的高级程序语言,而数字图像实际上 就是一组有序的离散数据,从而 MATLAB 从本质上就可以提供对图像处理的技术支持. 实验一:图像预处理实验(验证性实验) 实验目的: 要求学生掌握图像读取,显示和保存的方法,掌握空间域增强方法和频率域增强方法. 实验要求: 上机运行,调试通过. 实验内容: 对附录一中的练习 1~11,练习 13,进行上机运行和调试. 对上述练习,改变一些函数的参数,观察运行结果的变化. 实验二:形态学处理,图像分割,表达与描述实验(验证性实验) 实验目的: 要求学生掌握形态学处理,图像分割和图像表达与描述的基本方法,掌握相关的 MATLAB 函数. 实验要求: 上机运行,调试通过. 实验内容: 对附录一中的练习 15~24,练习 26,练习 28~32,进行上机运行和调试. 2)对上述练习,改变一些函数的参数,观察运行结果的变化. 实验三:直方图均衡化实验 (设计性实验) 实验名称:直方图均衡化实验 实验项目性质:设计性实验 所属课程名称:《图像处理与分析》 计划学时:4 实验目的 1.根据直方图均衡化的步骤,编程实现直方图均衡化的功能. 2.加深对直方图均衡化的基本原理的理解. 预习与参考 1.R. C. Gonzalez, R. E. Woods.《数字图像处理》(第二版).北京:电子工业出
版社,2003. 2.《图像处理与分析实验指导书》的附录一和附录二. 2.R. C. Gonzalez, R. E. Woods, S. L. Eddins.《数字图像处理》(MATLAB 版). 北京:电子工业出版社,2005. 3.徐飞,施晓红.《Matlab 应用图像处理》.西安:西安电子科技大学出版社, 2002. 实验要求(设计要求) 按下列步骤设计和实现直方图均衡化: 列出原始图像的灰度级,其中 L 是灰度级的个数. 统计各灰度级的像素数目. 计算原始图像直方图各灰度级的频数,其中 n 为原始图像总的像素数目. 计算累积分布函数. 应用以下公式计算映射后的输出图像的灰度级,P 为输出图像灰度级的个数: 其中,INT 为取整符号 6.统计映射后各灰度级的像素数目. 7.计算输出直方图. 8.用的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像. 实验(设计)仪器设备和材料清单 1.计算机 1 台/每人 考核形式 1.验收调试结果; 2.实验报告 实验报告要求 1.技术路线; 2.MATLAB 程序; 3.运行结果; 4.心得体会 思考题 1.直方图均衡化的目的是使图像直方图尽可能地分布均匀,你有什么改进的思路 2.你是如何理解步骤 5 的 附录一:MATLAB 数字图像处理 MATLAB 简介 1.1 主要用途及特点 主要用途:算法研究 主要特点:语句功能强大;不能生成可执行文件. 1.2 MATLAB 工作环境 1.2.1 Matlab 桌面 桌面包括 5 个子窗口:命令窗口,工作空间窗口,当前目录窗口,历史命令窗口,一个或多个图形 窗口(仅在用户显示图形式出现). 命令窗口是用户在提示符(>>)处键入 MATLAB 命令和表达式的地方,也是显示那些命令输出的 地方. 工作空间窗口显示对话中创建的变量和它们的某些信息. 当前目录窗口显示当前目录的内容(即路径).
历史命令窗口包含用户已在命令窗口中输入的命令的纪录. 使用 MATLAB 编辑器创建 M 文件 1.2.3 获得帮助 (1)help (2)look 数字图像的读取,显示,保存,数据类型和图像类型,数据类型间的转换,图像类型间的转换 2.1 图像的读取 语法:imread ( 'filename' ) 说明:读取图像 格式名称 描述 可识别扩展符 TIFF 加标记的图像文件格式 .tif, .tiff JPEG 联合图像专家组 .jpg, .jpeg GIF 图形交换格式 .gif BMP Windows 位图 .bmp PNG 可移植网络图形 .png XWD X Window 转储 .xwd 语法:[M, N]=size ( 'filename' ) 说明:给出一幅图像的行数和列数 2.2 图像的显示 语法:imshow ( f, G) imshow (f, [low high]) imshow (f, [ ]) 说明:G 是显示该图像的灰度级数; 小于或等于 low 的值都显示为黑色,大于或等于 high 的值都显示为白色. [ ]自动将变量 low 设置为 f 的最小值,将 high 设置为 f 的最大值. 2.3 图像的保存 语法:imwrite ( f, 'filename') 说明:
练习 1 f = imread ( 'saturn.tif'); [M, N] = size( f ); g = imread ( 'trees.tif' ); imshow ( f ); figure, imshow (g); %显示另一幅图像 imwrite (f, 's2.jpg') 数据类型 名称 描述 double 双精度浮点数,范围为-10exp(308)~ 10exp(308),8 字节 uint8 无符号 8 比特整数,1 字节 uint16 无符号 16 比特整数,2 字节 uint32 无符号 32 比特整数,4 字节 int8 有符号 8 比特整数,1 字节 int16 有符号 16 比特整数,2 字节 int32 有符号 32 比特整数,4 字节 single 单精度浮点数,范围为-10exp(38)~ 10exp(38) ,4 字节 char 字符 logical 值为 0 或 1 四种常用类型:double,uint8,char,logical. 图像类型 名称 描述 亮度图像 uint8 类范围为[0 255],double 类归一化为[0 1] 二值图像 图像取值只有 0 和 1 的逻辑数组 索引图像 索引图像 RGB 图像 彩色图像 6 数据类与图像类型间的转换 数据类间的转换
语法:B = data_class_name ( A ) 举例:若 A 是 8 位图像,则 B = double ( A )转换为双精度图像. 图像类型间的转换 函数名称 将输入转换为 有效的输入图像数据类 im2uint8 uint8 Logical, uint8, uint16 和 double im2uint16 uint16 Logical, uint8, uint16 和 double mat2gray double double im2double double Logical, uint8, uint16 和 double im2bw logical uint8, uint16 和 double 练习 2 f=[1 2; 3 4]; g=mat2gray(f); gb=im2bw(g, 0.6) %0.6 is a threshold 亮度变换与空间滤波 3.1 亮度变换函数 3.1.1 基本亮度变换函数 语法:g=imadjust(f, [low_in high_in], [low_out high_out],gamma) 说明:将图像 f 中的亮度值影响到 g 中的新值,即将 low_in 至 high_in 之间的值映射到 low_out 至 high_out 之间的值, low_in 以下的值映射为 low_out, high_in 以上的值映射为 high_out. 参数 gamma 指定了映射曲线的形状. 练习 3 f = imread ( 'pout.tif'); imshow(f); g1=imadjust(f, [0 1], [1 0]); figure, imshow(g1); g2=imadjust(f, [0.5 0.75], [1 0], 0.5); figure, imshow(g2); 对比度拉伸变换 对数变换方法:g=c*log(1+double(f)) 说明:对数变换的一项主要应用是压缩动态范围,常用于傅里叶频谱显示. 练习 4 f = imread ( 'pout.tif'); F=fft2(f); % Fourier Transform FC=fftshift(F); %将变换原点移到频率矩形的中心. imshow(abs(FC), [ ]);
S2= log(1+ abs(FC)); figure,imshow(S2, [ ]); 对比度拉伸方法:g=1./(1+(m./(double(f)+eps).^E) 说明:eps 是浮点数的相对精度,可避免 f 出现 0 值时的溢出现象. 3.2 直方图处理与函数绘图 3.2.1 生成并绘制图像的直方图 语法:h=imhist(f, b) p= imhist(f, b)/num1(f) 说明:b 是用于形成直方图的灰度级的个数.P 是归一化直方图. 练习 5 f = imread ( 'pout.tif'); imhist(f); 直方图均衡化 语法:g=histeq(f, nlev) 说明:nlev 是为输出图像制定的灰度级数. 练习 6 f = imread ( 'tire.tif'); imshow(f); figure,imhist(f); ylim('auto'); %自动设定 y 轴坐标范围和刻度 g=histeq(f,256); figure, imshow(g); figure,imhist(g); ylim('auto'); 3.3 空间滤波 3.3.1 线性空间滤波 语法:g=imfilter(f, w, filtering_mode, boundary_options, size_options) 说明:w 为滤波掩模 选项 描述 滤波类型 'corr' 滤波器通过使用相关来完成.该值是默认值. 'conv' 滤波器通过使用卷积来完成 边界选项 P 输入图像的边界通过用值 P 来扩展.P 的默认值为 0. 'replicate' 图像大小通过复制外边界的值来扩展. 'symmetric' 图像大小通过反射其边界来扩展. 'circular' 图像大小通过将图像看成是一个二维周期函数的一个周期来扩展
大小选项 'full' 输出图像的大小与被扩展图像的大小相同 'same' 输出图像的大小与输入图像的大小相同 练习 7 f = imread ( 'saturn.tif'); w=ones(31); %单位矩阵掩模 gd=imfilter(f,w); imshow(gd,[]); 3.3.2 非线性空间滤波 略. 3.4 图像处理工具箱的标准空间滤波器 3.4.1 线性空间滤波器 语法:w=fspecial('type',parameter) 说明:见下表 练习 8 f = imread ( 'saturn.tif'); w4=fspecial('laplacian', 0) w8=[1 1 1; 1 -8 1; 1 1 1]; g4=f-imfilter(f, w4, 'replicate'); g8=f-imfilter(f, w8, 'replicate'); imshow(f); figure, imshow(g4); figure, imshow(g8); 3.4.2 非线性空间滤波器 语法:g=ordfilt2(f, order, domain) 说明:使用邻域的一组排序元素中的第 oder 个元素来代替 f 中的每个元素,而该邻域则由 domain 中的非零元素指定. 语法:g=medfilt2(f, [m n],padopt) 说明:中值滤波器.padopt 指定了三个可能的边界填充选项之一. 'zeros'(默认值). 'symmetric',镜像反射. 'indexed',double 类图像,以 1 填充,否则以 0 填充. 练习 9 f = imread ( 'eight.tif'); fn=imnoise(f, 'salt&pepper', 0.2); %加椒盐噪声 gm=medfilt2(fn); imshow(fn); figure,imshow(gm); 语法:J = wiener2(I,[m n],noise) 说明:进行二维适应性去噪过滤处理(维纳滤波). 练习 10 I = imread('saturn.tif'); J = imnoise(I,'gaussian',0,0.005); %加高斯噪声
K = wiener2(J,[5 5]); imshow(J) figure, imshow(K) 频域处理 在 MATLAB 中计算并可视化二维 DFT 练习 11 f = imread ( 'saturn.tif'); F=fft2(f); % Fourier Transform S=abs(F); %计算傅里叶频谱 imshow(S,[]); FC=fftshift(F); %将变换原点移到频率矩形的中心. figure,imshow(abs(FC), [ ]); S2= log(1+ abs(FC)); figure,imshow(S2, [ ]); 频域滤波 注意事项 假设函数 f(x,y)和 h(x,y)的大小分别为 A×B 和 C×D,为了避免卷积运算造成的折叠误差(即混叠 失真),必须通过对 f 和 g 补零,构造两个大小均为 P×Q 的扩充寒暑,才能在频率域中进行运算. 其中,P,Q 必须满足: DFT 滤波的基本步骤 对 f 和 g 进行补零. 对 f 和 g 分别进行傅里叶变换,得到频域 F 和 H. 将变换乘以滤波函数 G=H.*F; 获得 G 的傅里叶逆变换的实部: g=real(ifft2(G)); 讲左上部的矩形修建为原始大小: g=g(1:size(f,1),1:size(f,2)); 练习 12: 根据 DFT 滤波的基本步骤,进行编程实现. 从空间滤波器获得频率滤波器 语法:H=fft2(h, M, N) 说明:M,N 是滤波器的行数和列数,由被滤波的图像大小决定,是补零 的结果. 语法:H=freqz2(h, R, C) 说明:计算 FIR 滤波器的频率响应. 练习 13 h =[1 1 1; 1 -8 1; 1 1 1]; H=freqz2(h, 50, 50); 在频率域中直接生成滤波器 练习题 14: 编程实现在频率域中生成巴特沃兹低通滤波器(或高通滤波器,或高通强调滤波器). 形态学图像处理 5.1 膨胀和腐蚀
分享到:
收藏