您的当前位置:首页1 光电图像处理实验(图像基本操作).

1 光电图像处理实验(图像基本操作).

2022-07-09 来源:乌哈旅游
光电图像处理

实 验 报 告

学生姓名: 班 级: 学 号: 指导教师: 实验日期:

一、实验名称: 图像基本操作 二、实验目的:

1.掌握MATLAB的操作窗口功能;

2.熟练掌握MATLAB的图像处理基本操作,熟练掌握数字图像读取、显示、保存;

3.熟练掌握MATLAB各种图像格式文件的互相转换。

三、实验原理:

MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB工作环境:

桌面包括4个子窗口:命令窗口、工作空间窗口、当前路径窗口、历史命令窗口。 命令窗口是用户在提示符(>>)处键入MATLAB命令和表达式的地方,也是显示那些命令输出的地方。

工作空间窗口显示当前的变量名称和值。双击可以启动数组编辑器。 当前路径窗口显示当前的工作目录。工作目录的内容显示在当前目录窗口内。可通过Set Path改变。

历史命令窗口包含用户已在命令窗口中输入的命令的记录。如果要重新执行以前的MATLAB命令,可在历史命令窗口中双击该命令即可。

使用MATLAB编辑器创建M文件:MATLAB编辑器既是用于创建M文件的文本编辑器,

也是调试器。M文件用扩展符.m来表示。可通过在命令输入窗口键入edit命令或在File菜单栏New,Blank M-File实现。

MATLAB的帮助系统:可在命令窗口里面输入help或者helpbrowser;在帮助浏览器可以直接输入需要查找的函数名,查看具体用法。

Matlab 图像处理工具箱——Image Processing Toolbox,包含一百余个函数,按其内容划分为以下几类:

⑴、图像显示函数;

⑵、图像文件输入、输出函数; ⑶、图像几何操作函数; ⑷、图像像素值及统计函数; ⑸、图像分析函数; ⑹、图像增强函数; ⑺、线性滤波函数;

⑻、二维线性滤波器设计函数; ⑼、图像变换函数; ⑽、图像邻域及块操作函数; ⑾、二值图像操作函数; ⑿、基于区域的图像处理函数; ⒀、颜色图操作函数; ⒁、颜色空间转换函数; ⒂、图像类型和类型转换函数。 常用函数:

图像的读写:用imread( )读取图像,imwrite( )输出图像。 图像显示于屏幕:imshow( ) 。 图像进行裁剪:imcrop( )。 图像的插值缩放:imresize( )。 图像的旋转:imrotate( ) 。

四、实验内容:

1.图像读取 imread

函数格式: imread( ‘filename’ );

其中,filename是一个含有图像文件全名的字符串,包括文件的扩展名。单引号‘’用来界定filename字符串。结尾处用分号在MATLAB中用于取消输出。

例如:I=imread( ‘lena.bmp’ );

(图像的大小可用函数size给出图像的行数和列数。其格式: size(I);

如果size前面没有变量,则存在ans变量里。如果有变量,比如[M,N]=size(I);则该命令将返回函数的行数M和列数N。)

2.图像显示 imshow

函数格式:imshow(I, G);

G是显示该图像的灰度级数,若将G省略,则默认的灰度级数为256。 imshow(I, [low high]);

会将所有小于或等于low的值都显示为黑色,所有大于或等于high的值都显示为白色。界于low和high之间的值将以默认的级数显示为中等亮度值。

imshow(I,[]);

可以将变量low设置为数组f的最小值,将变量high设置为数组f的最大值。该函数用来显示动态范围较小的图像时非常有用。

例如:figure,imshow(I);

如果需要显示两幅幅图像,可以在命令窗口加figure函数: 例如:imshow(I), figure, imshow(f);

可以同时显示两幅图像。注意:只要用逗号或分号正确地分隔开了不同的命令,一行中可以写几条命令。

还可以使用 subplot命令实现多幅图像显示。Subplot(m,n,p)是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图。p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。

(函数impixelinfo用来交互显示某个像素的亮度值。该函数可以显示覆盖在图像上的光标。当光标随着鼠标在图像上移动时,光标所在位置的坐标和该点的亮度值会在图像窗口下方显示出来。) 3.图像保存 imwrite

函数格式:imwrite(f, ‘filename’)

该函数的功能是使用函数imwrite可以将图像写到磁盘上的filename命令的文件中。Filename必须包含文件的扩展名。

例如:imwrite (I, ‘newimage.bmp’); 表示将数组I存放到文件名为newimage的位图中。 4.图像类型之间的转换 im2bw

函数格式:G=im2bw(I,T)

该函数的功能就是将亮度图像I转换为一幅二值图像G。在亮度图像中,亮度值小于T的像素点全部转换为二值图像中值为0的像素点;在亮度图像中,亮度值大于T的像素点全部转换为二值图像中值为1的像素点。该函数规定T的取值必须在0-1内。首先MATLAB会将亮度图像的值I归一化到[0,1]间,再进行转换。

函数格式:G=rgb2gray(I)

该函数将彩色图像数组I转换为灰度图像G。 【归一化:A/max(A)】

5. 图像的几何操作

图像的加、减、乘、除运算;图像的缩放、旋转。

五、实验器材

计算机,Matlab软件。 六、实验步骤:

1.将第一步与第四部合成一块运行。

2. 图像的加、减、乘、除运算;图像的缩放、旋转。

七、实验程序及结论:

1.将第一步与第四部合成一块运行

其源程序为:

>> i=imread('lena.jpg'); >> imshow(i);

%灰度图转化为二值图 >> G=im2bw(i);

>> figure,imshow(G);

>> imwrite(G, '11-2lena-二值.bmp');

>> subplot(1,2,1), imshow(i); >> subplot(1,2,2), imshow(G);

%彩色图像的读取及转化

>> [a,b]=imread('白云广厦.bmp'); >> figure,imshow(a,b);

>> G=rgb2gray(b); >> figure,imshow(a,G);

其结果为:

2. 两幅图像叠加 imadd(I,J)及多图排列

其源程序为:

>> I = imread('lena.jpg'); >> J = imread('lena.jpg'); >> K = imadd(I,J); >> imshow(K)

>> %imwrite(K, '12-1两图像相加.bmp'); >>

>> subplot(1,3,1), imshow(I) >> subplot(1,3,2), imshow(J) >> subplot(1,3,3), imshow(K)

其结果为:

3.两幅图像相减 imsubtract(I,J)

其源程序为:

>> I = imread('lena.jpg'); >> J = imread('lena.jpg'); >> K=imsubtract(I,J);

>> subplot(1,3,1), imshow(I) >> subplot(1,3,2), imshow(J) >> subplot(1,3,3), imshow(K)

其结果为:

4.图像整体亮度减小 imsubtract(I, b)

其源程序为:

>> I = imread('lena.jpg');

>> J=imsubtract(I, 50);>> subplot(1,2,1), imshow(I) >> subplot(1,2,2), imshow(J)

其结果为:

5. 图像的缩放:

Nearest:最近邻插值, Bilinear:双线性插值,其源程序为:

>> J = imread('lena.jpg');

>> X1=imresize(J,1.5,'nearest'); >> X2=imresize(J,2,'bilinear');>> X3=imresize(J,0.5,'bicubic'); >> imshow(J)

>> figure,imshow(X1) >> figure,imshow(X2) >> figure,imshow(X3);

其结果为:

双三次插值,系统默认值。

Bicubic:

6.旋转 imrotate

其源程序为:

>> I = imread('lena.jpg');

>> J=imrotate(I,45,'bilinear'); >> K=imrotate(I,60,'bilinear'); >> L=imrotate(I,90,'bilinear'); >> %figure,imshow(I) >> %figure,imshow(J) >> %figure,imshow(K)

>> imwrite(I, '16-0.bmp'); >> imwrite(J, '16-1.bmp'); >> subplot(2,2,1), imshow(I) >> subplot(2,2,2), imshow(J) >> subplot(2,2,3), imshow(K) >> subplot(2,2,4), imshow(L)

其结果为:

八、思考题:

1、 MATLAB处理的图像类型有哪些,简介其特点?

答:MATLAB支持五种图像类型,即二值图像、索引图像、灰度图像、RGB图像和多帧图像阵列。有关它们的定义见下表2.1。

表2.1 图像类型及其对应的像素数据类型 图像类型 二值图像 Double数据 图像为m×n的整数矩阵,元素值范围{0,1} 图像为m×n的浮点数矩阵,元素值范围[0,1] 图像为m×n×3的浮点数矩阵,图像为m×n的整数矩阵,元素值范围[0,p] uint8或uint16数据 图像为m×n的整数矩阵,元素值范围{0,1} 图像为m×n的整数矩阵,元素值范围[0,255]或[0,65535] 图像为m×n×3的整数矩阵,元素值范围[0,255]或[0,65535] 图像为m×n的整数矩阵,元素值范围[0,p-1] 灰度图像 RGB图像 元素值范围[0,1] 索引图像 九、实验改进意见或建议:

因篇幅问题不能全部显示,请点此查看更多更全内容