第一篇:Matlab 总结报告
MATLAB 总结报告
班级:09电气(1)班 姓名:李琐 学号:0905071042 MATLAB是一种计算科学软件,专门以矩阵的形式处理数据,它的功能有强大矩阵运算能力,方便直观的作图功能,全面的数值计算功能,图形用户界面GUI,仿真,专用工具箱。在MATLAB这本书中讲了好多内容,我觉得矩阵和数组、图形基础这两块内容在实际生活中用的比较多,下面我主要深入讲解图形基础中二维数组的的基本知识。
MATLAB的图形功能主要包括数据可视化、创建用户图形界面和简单数据统计处理等,数据或图形的可视化是进行数据处理或图形图像处理的第一步,它不仅仅是二维,还可以是三维空间。要想在MATLAB中进行数据可视化要进行以下步骤,首先要准备需要绘制在MATLAB图形窗体中的数据,创建图形窗体,并选择绘制数据的区域,然后绘制图形或曲线,设置曲线的属性,设置绘图区域的属性,并添加数据网格线,为绘制的图形添加标题、轴标签或者标注文本,最后打印或导出图形。一、二维图形中基本绘图函数的使用
1、基本绘图函数有Plot, semilogx, semilogy, loglog, polar, plotyy;单矢量绘图:plot(y),矢量y的元素与y元素下标之间在线性坐标下的关系曲线。双矢量绘图:如x和y是同样长度的矢量, plot(x,y)命令将绘制y元素对应于x元素的xy曲线图。对数坐标绘图: x轴对数 semilogx, y轴对数semilogy, 双对数loglog。极坐标绘图: polar(theta,rho)theta—角度,rho—半径。
2、多重曲线绘图:一组变量绘图 plot(x,y):若x为矢量,y为矩阵时plot(x,y)用不同的颜色绘制y矩阵中各行或列对应于x的曲线;若x为矩阵,y为矢量时绘图规则与上面类似,只是将x中的每一行或列对应于y进行绘图;x和y是同样大小的矩阵时, plot(x,y)绘制y矩阵中各列对应于x各列的图形;如果y是矩阵,则plot(y)绘出y中各列相对于行号的图形,对于n行矩阵,x轴的坐标为[1:n]。多组变量绘图:对于一系列相应的矩阵yi和xi,可以使用多组变量绘图法:plot(x1,y1,x2,y2,…,xn,yn),这种方法的优点是允许将不同大小的矩阵或矢量的图形绘制在一张图上。双y轴绘图:plotyy,在一个图形窗口绘制两组数据曲线,共用一个x轴,图形两边各有一个y轴。两条图线可以调用不同的绘图方法。
3、复数绘图: plot用于函数绘制复数的图形时,通常虚部是被忽略的。但plot只作用于单个复变量z时,则绘出的是实部对虚部的关系图(复平面上的一组点)。即这时plot(z)等价于 plot(real(z)).如果在复平面绘制多重线,只能分别以实部和虚部为坐标来绘制,否则虚部将被忽略,并给出警告。二、二维图形辅助操作命令
1、MATLAB绘图中的四种线形:实线(-)、点线(:)、点划线(-.)、虚线(--);标记点类型:.(点), +(加号), *(星号),o(圆圈),×(十字), s(矩形),d(菱形), △(上三角), ▽(下三角), <(左三角),>(右三角), p(五边形),h(六边形);线的颜色有红r,绿g, 蓝b, 黄y, 粉红m, 青c(cyan),黑k.。图线的其他属性:可设置图线的宽度、标记点的边缘颜色、填充颜色、标记点的大小、加网格。
2、MATLAB提供的用于图形控制的函数和命令:axis: 人工选择坐标轴尺寸.clf:清图形窗口.ginput:利用鼠标的十字准线输入.Hold:保持图形.shg:显示图形窗口.subplot:将图形窗口分成N块子窗口.3、图形窗口的创建和选择:figure(n)函数用于为当前的绘图创建图形窗口,每运行一次figure就会创建一个新的图形窗口,n表示第个n窗口,如果窗口定义了句柄,也可以用figure(h)将句柄h的窗口作为当前窗口。clf 命令用于清除当前图形窗口中的内容。shg命令用于显示当前图形窗口。在一个图形窗口中绘制多个子图形:subplot(m,n,p), 把窗口分成m×n个小窗口,并把第p个窗口当作当前窗口。在一个已有的图形上绘图:用hold on命令在一个已有的图形上继续绘图,使用hold off命令结束继续绘图。
4、MATLAB中控制绘图区域就是控制轴的显示区域,控制图轴有两个函数,一个是axes函数,另一个是axis函数,它们两个都能实现图轴设置。Axis函数控制格式为axis(xmin xmax ymin ymax):指定二维图形x和y轴的刻度范围。axes函数实际上是控制图轴的Position属性。
5、MATLAB的图形标注方法:title(txt)在图形窗口顶端的中间位置输出字符串txt作为标题。Xlabel(txt)在X坐标下的中间位置输出字符串txt 作为标题。Ylabel(txt)在Y坐标下的中间位置输出字符串txt 作为标题。
Text 任意定位的标注。gtext 鼠标定位标注。legent 标注图例。三. 特殊图形的介绍 1. 条形图: bar(y), bar(x,y), barh, bar3(y), bar3(x,y),(1)二维条形图 :bar(y), bar(x,y), barh,如果y是矢量,bar(y)绘制最简
单的条形图, 每一个条形图的位置由y元素的下标决定,高度由y元素的大小决定。当y是m×n阶的矩阵时,bar(y)绘制的条形图以分组或叠加的形式表现。矩阵中每一行元素绘制在一组中,每一列元素绘制在每组中相对应的位置上(各组中同样颜色的条形表示同一列数据);使用bar(x,y)绘制指定x坐标的条形图,其中x必须是矢量,用于确定各组条形图的位置。三维条形图:bar3(y),将m×n阶的矩阵绘制成分布在三维空间中的柱体,有分组形式和分列形式两种。条形图中的图形叠加:通过在相同的位置创建一个与原来条形图中的坐标轴相对独立的新的坐标轴实现条形图的叠加。
2、饼图: 用于表示矢量或矩阵中各元素所占有的比例。函数pie和pie3提供平面饼图和三维饼图的绘图功能。不分离饼图: pie(x); 带分离切块的饼图:在矢量x的后面加一个与x相同长度的矢量,该矢量中所有不为0的元素所对应的矢量x中的切块将被分离出来。使用x中的数据绘制饼图,x中的每一个元素用饼图中的一个扇区表示。饼图的绘图函数pic(x,explode)功能:绘制向量x的饼图。不完整的饼图:如果向量x的元素和小于1,则绘制不完全的饼图。explode是与向量x大小相同的向量,并且其中不为零的元素所对应的相应部分从饼图中独立出来。三维饼图:有一定厚度的饼图,由函数pie3实现,调用方法与二维饼图相同。
3.其他图形: MATLAB有20多种特殊图形的绘制方法,下述为常用方法。(1)直方图: 一种统计运算的结果,它的横轴是数据的幅度,纵轴是对应于各个幅度数据出现的次数,直方图没有负数。bar3h(x,y)Bar(X,Y,WIDTH,参数)功能:对m*n矩阵Y绘制含有m组、每组n个宽度为WIDTH柱形条的直方图。barth(X,Y,WIDTH,参数)功能:绘制水平直方图。(2)离散杆状图:Stem 离散杆状图的绘图函数stem(x,y,’filled’)功能:绘制向量X中指定的序列Y的填充的离散杆状图。(3)阶梯图:调用函数stairs(x,y),每一阶梯的起始点为矢量y的数据点。(4)彩色分散点图函数:scatter(x,y,c,s)x, y为两个矢量,用于定位数据点,s为绘图点的大小,c为绘图所使用的色彩,s和c均可以以矢量或表达式形式给出,s和c为与x或y同长度的矢量时标记点尺 寸和颜色将按线性规律变化。在 scatter函数的前4各参数之后还可以增加第五个参数‘ filled‘,表示填充绘图点。Scatter与plot 的最大差别在于Scatter可以绘制变尺寸、变颜色的点图。(5)射线图:compass 射线图的绘图函数 compass(Z)功能:把复数矩阵Z中元素的相角和幅值显示成从原点辐射的箭头。Compass(X,Y)等价于compass(X+Y*i).compass(Z,str)使用str确定的线型绘制箭头。
通过以上介绍,基本上可以很深入的了解到作图的基本操作,在学习这门课的过程中我领会到了什么叫自觉学习,主动学习,在以往的课程中每个老师对学生的督促都很紧,有时候是不得不学啊,上MATLAB这门课,我从头至尾都不知道老师为什么这样做,也许是上课时老师教的内容多,消化不了,所以每次做作业都要自己一个一个重复学习,重复练习,在这门课上花了我不少课余时间,我知道付出的多就一定会收获的多,我也知道把这门课学好,会在很多地方用到,可以减少很多不必要的麻烦。我觉得能把在这门课学成这样,不仅要感谢老师的悉心教导,还要感谢同学的热心帮助,虽然自己学的不是太好,但是我已经付出了尝试了,从开始的一头雾水到清楚的理解,再到程序的成功运行,这一系列的过程的体验才是最美的享受,虽然这门课结束了,但是我对这本书还是会继续学习下去的,多积累点知识才是最主要的目的。
第二篇:matlab图像分割总结报告(定稿)
课程总结报告
题目: 图像分割程序设计
院 系 电气与电子工程学院
专 业 xxxx 班 级 研电16xx 学 号 116xxxxxx 姓 名 xx
2016年 11月3日
摘 要:图像分割是图像处理与计算机视觉的基本问题之一,是图像处理图像分析的关键步骤。其中图像二值化又是图像分割的重点。本文对全局和局部阈值二值化法的几种常用的算法和基本自适应阈值二值化进行了综述。每基于一定理论和算法的图像二值化方法都有各自不同的优势和缺点,在实际应用当中应根据不同使用目的和使用标准采取不同的方法以达到最佳效果。本文在MATLAB 编程技术及其GUI 图形用户界面设计的基础上,开发了具有交互式特点的数字图像处理GUI软件,界面操作简单方便,实现了图像二值化的功能。
关键词:二值化;全局阈值法;局部阈值法;基本自适应阈值法;图像分割; MATLAB GUI 0 引言
图像分割技术作为图像处理领域中极为重要的内容之一,是实现图像分析和理解的基础,而图像二值化又是图像分割的重点。只有在其基础上才能对目标进行特征提取和参数测量,使得更高层的图像分析和理解成为可能。二值化是图像处理和分析的关键技术,也是个经典难题。随着实际应用的需要,对图像二值化进行深入的研究,不断改进原有方法,提出新方法具有重要的意义。图像二值化
二值化是图像处理中的一个重要的问题,广泛应用于图像分割,图像增强,图像识别等领域。根据其运算的范围不同,图像的二值化方法可分为全局阈值方法和局部阈值方法。它利用了图像中要提取的目标物与其背景在灰度特性上的差异,把原图像变为仅用两个灰度值表示的图像目标和背景的二值图像。其处理思想是,假设一副灰度图像中的灰度级范围是(0,255),则图像中每一点像素的灰度值为f(x,y),f(x,y)∈{0,1,„,255),设阈值为T(0≤T≤255)则:
0g(x,y)1f(x,y)Tf(x,y)T其中:g(x,y)表示二值化后图像中各个像素点的值,若g(x,y)=1表示改点为目标;若g(x,y)=0,表示改点为背景。GUI设计
图形用于界面(GUI)是提供人机交互的工具和方法。MATLAB的GUI为开发者提供了一个不脱离MATLAB的开发环境,有助于MATLAB 程序的GUI集成。
本文设计的程序有以下功能:
1)实现图像的读取及显示其灰度直方图功能,保存功能及退出时“是否保存处理后图像”的提醒功能。
2)设计图形用户界面,让用户能够对图像进行全局阈值分割,可选方法
为迭代法、Otsu法及改进的Otsu法,同时显示该方法选取的阈值。
3)设计图形用户界面,让用户能够对图像进行局部阈值分割,可选方法为Bernsen法、Niblack法及改进的Bernsen法,同时关闭选取阈值的显示(因为此时每个像素点均有对应的阈值)。
4)编写程序对图像进行基本自适应阈值分割,即将用户所选取的图像进行分块后对每块图像用Otsu法进行二值化,并实现调整分块大小时实时显示处理后的图像功能。
具体GUI设计的程序代码及模块、菜单配置过程不在此赘述。MATLAB中运行相应的m文件,会出现如下图所示的初始界面:
图2.1 初始界面
可以看到,在图像没有打开之前图像分割功能是不可选的,这是在GUI编程中考虑到为避免对空白图像进行二值化可能会产生全黑图像的错误而设计的。
点击如下选项,可以打开指定图像,并显示其对应的灰度直方图:
图2.2 “打开”图像
现在“图像分割”菜单变为可选,选择相应算法可以得到不同效果的阈值分割结果图,相应可选方法如图:
图2.3 “图像分割”菜单
阈值分割完毕后,点击图标,可以对处理后的图像进行保存。若不保存直接选择“退出”菜单,程序会弹出如下图所示选框,提醒用户是否保存已更改的图片,可以根据用户需求进行选择,同时避免了错误的发生。
图2.4 “保存”与“退出” 阈值分割算法与实验分析
3.1 全局阈值分割
全局阈值法根据文本图像的直方图或灰度空间分布确定一个阈值,以此实现灰度文本图像到二值图像的转化。此方法的优点在于算法简单,对目标和背景明显分离、直方图分布呈双峰的图像效果良好,但是由于对整幅图使用一个阈值处理,因此其对输入图像有噪声或不均匀光照等情况抵抗能力差,应用受到极大限制,不能广泛地应用于实际。典型的全局阈值分割方法有迭代法、Otsu方法等。在此引入光照均匀的图3.1和光照不均匀的图3.2,本节将用下述全局阈值方法对其进行处理。
图3.1 原始图像1 图3.2 原始图像2
3.1.1 迭代法
迭代法的主要思想是利用循环迭代的方法,逐步逼近最佳阈值,其计算步骤主要是:
1)对图像进行灰度化,找出图像灰度的最大值和最小值,分别记为Rmax和
Rmin,令初始阈值为:
TRmaxRmin/2
2)根据当前的阈值T以及图像的各像素的灰度值,将图像像素分成前景与背景两组。
3)分别求出当前前景与背景两组像素的平均灰度值,记为u1和u2。4)求出新阈值:
Tu1u2/2
循环2)-4)步,直到两组的平均灰度值不再发生新的变化,此时即获得了所需要的阈值。这种方法运算很简单,因此处理图片的速度是很快的。处理光照均匀的图3.1后,得到阈值为0.5312的图3.3,可以看到效果还是比较好的;但是在处理光照不均匀的原图3.2后,得到阈值为0.49393的图3.4,可见只使用一个阈值,已经没有办法兼顾到所有细节情况了。
图3.3 迭代法处理图1 图3.4 迭代法处理图2 3.1.2 Otsu方法
二值化的算法之一Otsu法,也称大津法,是全局二值化算法的经典算法之一。它是1979年由Otsu提出的,其基本思想是求取最佳门限阈值,此阈值将图像灰度直方图分割成黑白(前景与背景)两部分,使两部分类间方差取得最大值,并使类内方差值最小,即类间分离性最大,而类内的相似性最大,因此,Otsu法也称最大类间方差法。对于某图像的灰度直方图,设T为区分前景灰度与背景灰度的二值化阈值,设w0为前景像素所占图像总像素的比例,令u0为所有前景像素的平均灰度,设w1为背景点数所占图像总像素的比例,令u1为所有背景像素的平均灰度,则图像的所有像素的平均灰度为uw0u0w1u1。在进行程序运
算时,T的取值可从图像的最小灰度值到图像的最大灰度值依次遍历,当T取某值时,类间方差公式bw0u0uw1u1u能取得最大,此时T即为二值化
22的最佳阈值。使类间方差最大的二值化意味着错分概率最小。
同样,我们采用Otsu算法对图3.1和图3.2进行处理,分别得到图3.5和图3.6。图3.5所选阈值为0.49804,可以看到效果依旧很好;图3.4所选阈值为0.49412,效果很不理想。
图3.5 Otsu法处理图1 图3.6 Otsu法处理图2 3.1.3 改进的Otsu方法
图像二值化是建立在物体和背景可以区分的基础上的,如亮度色调等不同,从而根据这些已知信息分出前背景。而一般的全局二值化如用Otsu方法获取最优阈值的方法,都是建立在图像前背景亮度有一定差距的基础上的,即图像直方图有双峰结构。如果对于一幅亮度不均匀的图像这种方法就不适用,解决的方法可以把图像根据整体亮度变化来分成若干小区域,而各区域的直方图中有两个峰,这样就能自适应得时整幅图都比较好的二值化。但是,这样对于一些复杂的图像就难处理,而且可能存在分块邻接缺陷,因此,本程序中先将整幅图的亮度调均匀,然后再用整体二值化就能得到很好的结果。这里使用Retinex算法把图像的整体亮度调均匀后(此法能很好得将各种照度不均的图调整成直方图中明显有双峰的均匀图),再用Otsu方法取阈值二值化。对光照不均匀图3.2进行处理,得到图3.7,可见此时的图像轮廓得到了还原,取得了较好效果。
图3.7 改进的Otsu法处理图1
3.1.4 全局阈值法小结
下面,我们对全局阈值法做一些总结。一般说来,全局阈值法想法都比较简单,实现起来也很高效简单,但这种也是有代价的。它的适用范围相对有限,擅长处理简单图像,比如目标与背景明显分离的,直方图分布呈双峰的图像。但是对于光照不均,模糊的文档及多边缘的图像,就会丢失很多的信息。在此引入文本图像图3.8。可以看到下半部分是清晰的文字,但是上半部分的表格,则具有淡淡的底,使得字迹看起来变淡了,也就是说模糊了。由于Otsu算法在全局阈值二值化方法中具有很好的评价,在这里仅使用法对其进行处理,来看一看效果。
图3.8 原始图像3 使用Otsu方法处理图3.8,所得阈值为0.7451,处理结果为图3.9。可以看到,图中下半部分还是比较清楚的,但是上半部分表中的文字显示很不理想。对于这种光照均匀地图像,改进的Otsu方法处理结果如图3.10,其细节丢失更为严重。这正是全局阈值二值化的简单性所付出的代价。由于该类方法只关心整幅图像的灰度值分布特征,然后就迅速进行处理它是高度宏观化的,因而对于局部的变化反映不够灵敏。因此,使用该方法会丢失图像的许多细节信息。
图3.9 Otsu法处理图2
图3.10 改进的Otsu法处理图2 由于全局阈值法的这一缺点,引出了关注细节的局部阈值二化算法。3.2 局部阈值分割
局部阈值法通过定义考察点的邻域,比较考察点与其邻域的灰度值来确定当前考察点的阈值。非均匀光照条件等情况虽然影响整体图像的灰度分布却不影响局部的图像性质,使得局部阈值法较全局阈值法有更广泛的应用。局部阈值法虽然能够根据局部灰度特性来自适应地选取阈值,有较大的灵活性,但局部阈值存在速度慢,对文本图像进行二值化处理时,可能导致出现笔画断裂现象以及伪影等问题,直接影响后面的识别工作。常用的局部阈值法有Bernsen算法、Niblack算法。
3.2.1 Bernsen算法
Bernsen算法是一种典型的局部阈值算法,其将窗口中各个像素灰度级最大值和最小值的平均值作为一个窗口的中心像素的阈值,因此此方法不存在预定阈值,适应性较全局阈值法广,不受非均匀光照条件等情况的影响。
设图像在像素点(i,j)处的灰度值f(i,j),考虑以像素点(i,j)为中心的2121窗口,则Bernsen算法可以描述为:
1Ti,jmaxf(im,jm)minf(im,jm)
2mmnn 图像中各个像素点(i,j)的阈值T对图像中各个像素点(i,j)用b(i,j)值逐点进行二值化:
0b(i,j)1
f(i,j)T(i,j)
f(i,j)T(i,j)
在实现算法的过程中会遇到一个不可避免的问题。当一个像素点处于整幅图像的边界处,或是其他距图像边界不足一个像素点单位的位置时,若以它为中心取的小块,那么所取得的小块就会有一部分是缺失的。这里,本文选取的处理方式是对原图像加边,新的边灰度值全赋值为0。
在使用Bernsen算法进行图像二值化的时候,是需要选择窗口的大小的,现在结合算法来具体讨论该因素的影响。从Bernsen算法求局部阈值公式来看,对于一个固定的像素点(x,y),当窗口尺度很小的时候,该像素点周围有细微的明暗变化即有少量像素点的灰度变化就会影响到阈值的选取;当窗口尺度变大的时候,更多的像素点会进入到窗口中,原窗口内的像素点只是现在的一部分,对于阈值所产生的影响就相对弱化了,原有的细节就有可能丢失。现引入一幅光照不均但像素点相对较少的图3.11,这样改变窗口大小进行测试时可以节约程序运行时间。
图3.11 原始图像4 现取窗口为3*3,效果如图3.12所示。图中出现了大量斑点噪声,文字被淹没了。这是因为窗口选得太小,二值化时像素点附近出现的细微明暗变化都被
图3.12 Bernsen法处理图1 图3.13 Bernsen法处理图2
识别出来了。将窗口放大为9*9,效果见图3.13。可以看到,效果好多了,许多斑点状噪声消失了,文字变得清楚了,但是字间噪声没有完全消除且粗笔状况也比较明显的。查阅相关文献表明,应该选取15*15的窗口,原因是这样所带来的噪声会显著的减少。同时,处理图片的时间则相应增加。鉴于此,在此后的处理中,大多取窗口为15*15。对于Bernsen法取窗口为15*15,所得的结果如图3.14。
图3.14 Bernsen法处理图3 下面对图3.8用Bernsen法进行二值化,看看效果如何。如图3.15,与Otsu法处理图2相比,列表中的文字变得相对清晰了,但是列表下方的文字出现了断笔现象,而且背景噪声问题同样不能忽视。
图3.15 Bernsen法处理图5 3.2.2 Niblack算法
Niblack方法也是一种应用很广泛的二值化算法。它根据局部均值和局部标
准差,确定图像中不同的阈值。在像素点(x,y)的阈值的计算是:
T(x,y)m(x,y)ks(x,y)
其中T(x,y)为阈值,m(x,y)为样本均值,s(x,y)为标准差,k为参数。对于邻域的选择需要满足能保存局部细节同时抑制噪声的产生。和Bernsen方法相似,使用Niblack方法进行图像二值化处理时,窗口大小的选择也是很重要的。理由相同,如果窗口选得很小,处理速度比较快,但是给二值图带来的噪声也是很严重的,导致前景淹没在噪声中,无法很容易的辨识;如果窗口选得大,会大幅地降低二值图中的噪声,但是处理的时间也变得更长了。窗口一般也取15*15,下面对图3.8进行分割,结果见图3.16。
图3.16 Niblack法处理图1 使用Niblack方法进行图像二值化处理,由于需要计算标准差,需要进行平方开方运算,所以速度是比较慢的,我们看一下Bernsen方法,它比方法的速度要快些。但是从处理效果来看,它比Otsu法和Bernsen法效果优秀。不仅列表中文字细节得到了很好地还原,列表下方的文字也没出现断笔现象,很清晰,唯一需要改善的就是图像背景噪声问题。3.2.3 对局部阈值法的一点思考
由于局部阈值法充分考虑到了每一个像素点及其附近像素点的灰度分布情况,能兼顾图像的细节变化,因此使用局部阈值二值化方法对图像进行分割处理,一般说来,会得到更好的效果。很容易这么想,如果对一幅质量很好的图片进行二值化分割,那么局部阈值法对其进行分割所得的效果应该比全局阈值法的效果好,即使不能更好,至少一样好。现在看一个例子,引入图3.17,它足够简单,背景与前景相比分离得很明显。图3.18是使用Otsu方法进行阈值分割的结果,图3.17 原始图像5 图3.18 Otsu算法处理图3 图3.19 Niblack算法处理图2 而图3.19是使用Niblack法进行阈值分割的结果。局部阈值法处理效果在这里反而的质量却降低了,它把没有文字的空白背景,错误地识别成文字像素点。能对付复杂问题的工具,却不能处理简单的。回头看Bernsen法和Niblack法阈值分割处理的结果图3.15~3.16,也存在相同问题。表格右侧空白背景,以及没有足够文字填充的一小段空白行,都被错误地识别成了前景。这说明,这个问题应该不是偶然出现的,可能是一个共性的问题。为了避免出现这种情况,在进行图像二值化处理时,当每选取一个小窗口,就应该先进行判定。如果这个小窗口内同时混有前景和背景,那么就进行该中心点的二值化;否则,小窗口内就只含有前景或是只有背景,就不应该进行阈值分割了,而应该采取一种方法去判断它是属于背景还是前景。至于具体实现方案,这也是未来对局部阈值分割进行进一步研究的方向。
3.3 基本自适应阈值分割
全局阈值存在的问题是不均匀亮度无法有效分割,解决办法除了像局部阈值法对图像每一个像素进行处理外,还可以将整幅图像化整为零,划分为许多个小块,分别进行处理,得到它的阈值。小块特点是彼此分离没有重叠,这也是与局部阈值法的区别。那么这个阈值相对于整体的全局阈值来说,就是与相应小块中的像素更加关联的,对于局部应该也是更好的。其中每一个小块,可以简单的将
它看作一幅图像,这样,要得到与这个小块相关的局部阈值,可以简单地使用全局阈值值法来对每个小块做出处理,进行二值化。
我们将图像划分成许多小块,如果称小块的长和宽为尺度的话,那么选取时,若尺度太大,对图像的局部还不够好;但是若尺度太小,小块内可能就只有前景或只有背景了,此时的二值化是不合理的。所以,给小块选择一个合适的尺度是很讲究的,本文目前只能通过不断尝试来确定。现引入图3.20,对其进行基本自适应阈值分割。
图3.20 原始图像6 图3.21 基本自适应阈值处理图1 经过尝试,现选用处理效果较好的115*115的分块对图3.20进行处理,所得结果如图3.21所示。我们发现,对于这种水平方向上光照不均的图像的处理,原图的细节得到了很好的保留,其处理效果还是很不错的。
事实上,一幅图划分成的子块是图像的一部分,它们的阈值应该是有所关联的。如果就这样一个个孤立开的话,就会发生阈值灰度跃变的问题,即由于每一个小块内的各自阈值都相差很大,可能导致块与块交界处的图像像素灰度值不连续,出现明显间断或不一致。解决办法有两个:要么对这些边界处的像素点做出处理,要么对这些阈值做出处理。具体实现办法还没有一个清晰的框架,只能等课程结束以后对其进行进一步的研究和学习。结束语
本文利用不同算法对不同图像进行了阈值分割处理,对处理所得到的二值图进行了比较。对于一些简单图像,全局阈值法能很好的保持原图的主要信息,且实现简单、运行速度快,但对复杂图像的处理效果不佳。对于光照不均或较复杂的图像,局部阈值法可以保留更多细节,但是背景噪声比较严重,且运行速度较慢。基本自适应阈值方法也能对光照不均的图像进行处理,但是分块大小的确定还没有一个准则,只能称之为半自适应阈值分割。实践工作中遇到的需要进行二值化的图像是纷繁复杂的,上面提到的算法尚有许多方面可以改善。本次程序设计,无论在数字图像处理的理论知识还是MATLAB软件中GUI的掌握上还是对算法的编程实现上,都有了更深刻的了解与进步。并且对图像处理有了很大的兴趣,希望在今后的学习中能够更加深入的学习。
第三篇:matlab作业题
第一章 MATLAB环境
1、MATLAB通用操作界面窗口包括哪些?命令窗口、历史命令窗口、当前目录窗口、工作空间窗口各有哪些功能?
答:MATLAB通用操作界面窗口包括:命令窗口、历史命令窗口、当前目录浏览器窗口、工作空间窗口、变量编辑器窗口、M文件编辑/调试器窗口、程序性能剖析窗口、MATLAB帮助。
命令窗口是MATLAB命令操作的最主要窗口,可以把命令窗口当做高级的“草稿纸”。在命令窗口中可以输入各种MATLAB的命令、函数和表达式,并显示除图形外的所有运算结果。
历史命令窗口用来记录并显示已经运行过的命令、函数和表达式,并允许用户对它们进行选择、复制和重运行,用户可以方便地输入和修改命令,选择多行命令以产生M文件。
当前目录窗口用来设置当前目录,可以随时显示当前目录下的M、MKL等文件的信息,扬文件类型、文件名、最后个修改时间和文件的说明信息等,并可以复制、编辑和运行M文件及装载MAT数据文件。
工作空间窗口用来显示所有MATLAB工作空间中的变量名、数据结构、类型、大小和字节数。
2、熟悉课本中表格1.4、1.5、1.6、1.7、1.8的内容。
3、如何生成数据文件?如何把数据文件中的相关内容输入到工作空间中,用实例进行操作。
4、在工作空间中可以通过哪些命令管理变量,写出每种语法的具体操作过程。答:(1)把工作空间中的数据存放到MAT数据文件。
语法:save filename 变量1 变量2 „„参数。
(2)从数据文件中取出变量存放到工作空间。
语法: load filename 变量1 变量2 „„。
(3)查阅MATLAB内存变量名。
语法:who(4)、查阅MATLAB内存变量变量名、大小、类型和字节数。
语法:whos(5)、删除工作空间中的变量。
语法:clear(6)查询工作空间中是否存在某个变量。
语法:i=exist(‘X’)
5、MATLAB用户文件格式有几哪种?扩展名各是什么?
答:MATLAB的用户文件格式通常有以下几种:(1)程序文件,扩展名为.m。(2)数据文件,扩展名为.mat。(3)可执行文件,扩展名为.mex。(4)图形文件,扩展名为.fig。(5)模型文件,扩展名为.mdl。
6、熟悉文件管理命令的语法,特别是命令type 作用。
7、详细操作课本26页例题1.3。
第二章 MATLAB数值计算
1、变量名的命名规则是什么?写出几个合理的变量。
答:MATLAB的变量命名规则:
(1)变量名区分字母的大、小写。例 如,“a”和“A”是不同的变量。(2)变量名不能超过63个字符,第63个字符后的字符被忽略。
(3)变量名必须以字母开头,变量名的组成可以是任意字母,数字或者下画线,但不能含有空格和标点符号。
(4)关键字不能作为变量名。
2、产生矩阵有哪几种方法?分别举例说明。
答:(1)通过显示元素列表输入矩阵。
例如:d=[2;3,4;5,6]
(2)通过语句生成矩阵。
例如:y=1:1:7
(3)由函数产生特殊矩阵。
例如:a=eye(4)
3、在excel表格中输入2行10列的数据,通过数据加载,输入到工作空间中,用矩阵元素的操作分别提取第1行和第2行的数据。
4、矩阵和数组的算术运算包括哪些运算?各有哪些不同点?
答:(1)矩阵和数组的加,减运算。
矩阵的加,减法运算规则与数组的完全相同,运算符也完全相同。(2)矩阵和数组的乘法运算。
矩阵的乘法运算表达式为“A*B”,表示矩阵的相乘。矩阵A的列数必须等于矩阵B的行数,除非其中有1个标量。
数组的乘法运算表达式为“A*B”,运算符为“*”,表示数组A和B中的对应元素相乘。
5、多项式如何表示?多项式求值、求根和多项式拟合的语法各是什么?
答:在MATLAB中多项式可以用长度为n+1的行向量表示为:P=[an,an-1„„a1,a0],即把多项式的各项系数烽按降幂次序排放成为行向量,如果多项式中缺某幂次项,则用0代替该幂次项的系数。
多项式求值语法:y=polyval(p,x)多项式求根语法:r=roots(p)多项式拟合语法:p=polyfit(x,y,n)
6、多项式一维插值有哪些类型?
答:多项式一维插值是指对一个自变量的插值,interep1函数是用来进行一维插值的,其语法为:yi=interp1(x,y,xi,“method”)。
Method是插值函数的类型,“linear”为线性插值(默认)。“nearest”为用最接近的相邻点插值。“spline”为三次样条插值。“cubic”为三次插值。
7、在M文件中完整地写出语句,使其产生课本中图2.5 一阶、二阶和三阶拟合曲线,并在适当位置添加图例。
解:随机产生一个一元三次多项式y=5x^3+2x^2+x+1;
拟合结果如图: x1=1:10;p=[2 3 4 5];
y0=polyval(p,x1);p1=polyfit(x1,y0,1);p2=polyfit(x1,y0,2);p3=polyfit(x1,y0,3);y1=polyval(p1,x1);y2=polyval(p2,x1);y3=polyval(p3,x1);plot(x1,y0,'r',x1,y1,'g',x1,y2,'-.',x1,y3,'*')legend('y1,一阶拟合','y2,二阶拟合','y3,三阶拟合',4)
8、元胞数组和结构数组有哪些创建方法?
答:元胞数组的创建方法:(1)直接使用{}创建。(2)由各元胞创建。(3)由各元朡内容创建。结构数组的创建方法:(1)直接创建。
(2)利用struct函数创建。
9、元胞数组和结构数组的内容如何获取?
答:元胞数组的内容获取:(1)取元胞数组的元素内容。(2)取元胞数组的元素。结构数组的获取:
(1)使用点号(.)获取。
(2)使用getfield获取结构数组的数据。(3)使用setfield设置结构数组的数据。
10、矢量积、数量积和混合积的语法各是什么?
答:矢量积的语法:cross(a,b)数量积的语法:dot(a,b)混合积的语法:dot(a,cross(b,c))
第四章 MATLAB图形处理
1、用plot(x,y)命令绘制混合式曲线时有几种情况?分别举例说明。
答:(1)如果x是向量,而y是矩阵,则x的长度必须等于矩阵y的行数或列数必须相等。如果x的长度与y的行数相等,则向量x与矩阵y的每列向量对应画一条曲线;如果x的长度与y的列数相等,则向量x与矩阵y的每行向量对应画一条曲线;如果y是方阵,则x和y的行数列数都相等,将向量x与矩阵y的每列向量画1条曲线。
(2)如果x是矩阵,y是向量,则y的长度必须等于x的行数或列数,绘制方法与前一种相似。
(3)如果x和y都是矩阵,则大小必须相同,将矩阵x的每列和y的每列画一条曲线。
2、熟悉本章表4.1、4.2、4.3、4.4、4.5、4.6中的内容。
3、能熟练操作课本124页中例题4.10。
x=0:0.1:2*pi;>> plot(x,sin(x))>> hold on >> plot(x,cos(x),'ro')>> title('y1=sin(x),y2=cos(x)')>> xlabel('x')>> legend('sin(x)','cos(x)',4)>> text(pi,sin(pi),'x=pi')
第五章 MATLAB程序设计
1、指出脚本文件和函数文件的不同点?
:脚本文件
(1)多条命令的综合体
(2)没有输入、输出变量
(3使用MATLAB基本工作空间
(4.没有函数声明行
函数文件
(1).常用于扩充MATLAB函数库(2).可以包含输入、输出变量
(3).运算中生成的所有变量都存放在函数工作空间(4).包含函数声明行
脚本文件可以理解为简单的M文件,脚本文件中的变量都是全局变量。
函数文件是在脚本文件的基础之上多添加了一行函数定义行,其代码组织结构
和调用方式与对应的脚本文件截然不同。函数文件是以函数声明行“function...”作为开始的,其实质就是用户往MATLAB函数库里边添加了子函数,函数文件中的变量都是局部变量,除非使用了特别声明。函数运行完毕之后,其定义的变量将从工作区间中清除。而脚本文件只是将一系列相关的代码结合封装,没有输入参数和输出参数,即不自带参数,也不一定要返回结果。而多数函数文件一般都有输入和输出变量,并见有返回结果。
2、分别用for 循环、while循环和函数调用编写。
1sum=∑()!
i=12i+1
i=10
n=10;sum=0;f=1;>> for i=1:10 f=f/(2*i*(2*i+1));sum=sum+f;end >> sum sum = 0.1752 >>
sum=0;f=1;i=1;>> while i<=10 f=f/(2*i*(2*i+1));sum=sum+f;i=i+1;end >> sum sum = 0.1752
8
第四篇:Matlab心得体会
Matlab心得体会
10金融3 吕淼 2010241125 在为学习这门课前就听说了他的强大,因为现在的经济模型都是需要这些分析软件的,也曾听说金融的未来方向是需要数学等等作为依托的。曾经旁听过学校数学建模的课程,当时老师用的是lingo。对那个只需要U盘携带就可以安装的小东西记忆深刻。等到学习matlab时觉得这才是真正的王道啊。
它不仅有强大的运算功能,还有强大的绘图功能,虽然学习了有一个学习,但是我对他的了解额仅仅是一点点,或许连入门都谈不上。因为我学习时了解到一个现实。就是matlab的学习依赖有比较好的数学功底,其中我看最经常运用到的就是矩阵。我从网上了解到matlab是一门高等数学和计算机技术结合的东西,学习它必须具有相应的数学和计算机知识。然而很可惜,我的书写不是很好。每次讲到这个部分的时候就觉得听说理解无能了。特别是我今年还是大二,有一次老师讲课时用到协方差。无可避免的我笑了,因为协方差是我们下节课概率论数理统计老师要讲的内容。大一的时候还不觉得,但是大二,越是学习以后的内容越是感觉到时间不够用。或许时间是够用的,但是无法放弃那些占用自己时间表的无用项目。虽然这学期的学习的时间短暂,就算时间足够,老师也不能把所有的都讲解给我们,因为一个软件的功能需要我们自己不断的去摸索,老师也不可能知道所有。老师只是个指路人,最终的学习还是要靠自己。而且在摸索的过程中,我们能够发现和体会学习的快乐。痛并快乐着是种常态了吧。
自我感觉学习matlab与其说是学习一门软件,更不如说是学习一门语言。用一种数理的语言描述现象,揭示表象下的规律。此外,我认为matlab中的作图功能很强大,不仅简单的函数现象可以明确画出,而且一些点状物,甚至立体图也可以画出。大一上微积分的时候,老师曾经多次在课件中加入用matlab画出的图来。不论是一维二维三维等等,都能很好的画出来。只要能编写出函数式,在短短的几秒之内,他就会呈现在你眼前。另外就是图形的直观性,这是由阴影的制作的。而且可以根据需要,坐标图上加标题,坐标轴标记,文本注释级栅格等,也可以指定图线形式,比如是虚线。颜色也可以自己来定。可以在同一张图上画,也可以单个显示。
今年选择金融matlab一方面出于希望能够提前修完大三时期的课程,能够空出更多的时间去考研或者为就业做准备。另一个考虑就是希望明年能够参加数学建模大赛,今年种种纠结放弃了,觉得万分可惜。明年也就是大三下学期的话我就会再来一次,而且还会更加坚定些。那么学习matlab的话对明年的计划也是有帮助的。在学习的过程中,因为以前学过access中的select语言,觉得就编写这方面是有共性的,但是matlab的编程语言似乎更多更复杂一点,这是由于涉及的数学模型,数学公式更多的原因。老师在讲解的过程中是通过一个个具体的金融例子来讲解的,而不是就matlab这个具体的软件工具进行讲解。这个给我带来相当大的打击,因为我发现我不仅仅是工具不能够熟练,涉及到的专业知识也是一知半解。这更加坚定了我要好好学习专业知识的决心,大学四年有几个人是希望荒度过去的呢?可是今年的这门课真的是让我感到没学到什么,估计也是因为我抱着看一看的随意态度来的吧,也没有那种遇到不懂的就一定要弄懂它的决心和毅力。说什么都是借口了,无法掩饰我没有学好它的事实。事实上,我觉得今年这门课的重点并不是让我们掌握这种软件的具体用法,而是主要向我们展示如何用它去解决一些金融问题,数学问题。这点让我很郁闷,因为我不懂得原理,听起来这门课倍感吃力啊。可是嘛,年轻没有什么不可以,又有谁可以断言我接下来的生活中不能好好学习这个东西为自己的工作,学习,生活,研究兴趣带来方便呢。
从大学开学的见闻到现在学习MATLAB,感觉这是一个很好的软件,语言简便,实用性强。作为一个做新手,想要学习好这门语言,可以说还是比较难的。在我接触这门语言的这些天,除了会画几个简单的图形,其他的还是有待提高。从另一个方面也对我们大学生提出了两个要求——充实的课外基础和良好的英语基础。在现代,几乎所有好的软件都是来自国外,假如不会外语,想学好是非常难的。其实想要学习好一们语言,不能只靠老师,关键是自己。每个人内心深处都是有抵触意识的,不可能把老师的所有都学到。学习这门语言,不光是学习一种语言,更重要的事学习一种方法,一种学习软件的方法,还有学习的态度。
总结一下,学习任何一门语言:态度决定一切。不论是英语还是计算机语言。其实以前上高中的时候接触过这种编程语言,当时记得最头疼的就是循环语句,但是在matlab中这种东西用的就比较少了。语言语句都是很简洁利落的,都是一枪瞄死靶心的那种,很直接,这也让我减轻不少心理负担。
其实学习这种事,与其说学习什么具体的东西,更不如说是学习一种态度,从种种波折中认识到自己的局限性,不足。心情会沮丧,也会豁然开朗。光想不练假把式,不论想的再多,不实际运用还是没有用的。书山有路勤为径,学海无涯苦作舟。华山再高,顶有过路。这就是我今年学习金融matlab的心得体会。
第五篇:Matlab心得体会
Matlab心得体会
10金融3 吕淼 2010241125 在为学习这门课前就听说了他的强大,因为现在的经济模型都是需要这些分析软件的,也曾听说金融的未来方向是需要数学等等作为依托的。曾经旁听过学校数学建模的课程,当时老师用的是lingo。对那个只需要U盘携带就可以安装的小东西记忆深刻。等到学习matlab时觉得这才是真正的王道啊。
它不仅有强大的运算功能,还有强大的绘图功能,虽然学习了有一个学习,但是我对他的了解额仅仅是一点点,或许连入门都谈不上。因为我学习时了解到一个现实。就是matlab的学习依赖有比较好的数学功底,其中我看最经常运用到的就是矩阵。我从网上了解到matlab是一门高等数学和计算机技术结合的东西,学习它必须具有相应的数学和计算机知识。然而很可惜,我的书写不是很好。每次讲到这个部分的时候就觉得听说理解无能了。特别是我今年还是大二,有一次老师讲课时用到协方差。无可避免的我笑了,因为协方差是我们下节课概率论数理统计老师要讲的内容。大一的时候还不觉得,但是大二,越是学习以后的内容越是感觉到时间不够用。或许时间是够用的,但是无法放弃那些占用自己时间表的无用项目。虽然这学期的学习的时间短暂,就算时间足够,老师也不能把所有的都讲解给我们,因为一个软件的功能需要我们自己不断的去摸索,老师也不可能知道所有。老师只是个指路人,最终的学习还是要靠自己。而且在摸索的过程中,我们能够发现和体会学习的快乐。痛并快乐着是种常态了吧。
自我感觉学习matlab与其说是学习一门软件,更不如说是学习一门语言。用一种数理的语言描述现象,揭示表象下的规律。此外,我认为matlab中的作图功能很强大,不仅简单的函数现象可以明确画出,而且一些点状物,甚至立体图也可以画出。大一上微积分的时候,老师曾经多次在课件中加入用matlab画出的图来。不论是一维二维三维等等,都能很好的画出来。只要能编写出函数式,在短短的几秒之内,他就会呈现在你眼前。另外就是图形的直观性,这是由阴影的制作的。而且可以根据需要,坐标图上加标题,坐标轴标记,文本注释级栅格等,也可以指定图线形式,比如是虚线。颜色也可以自己来定。可以在同一张图上画,也可以单个显示。
今年选择金融matlab一方面出于希望能够提前修完大三时期的课程,能够空出更多的时间去考研或者为就业做准备。另一个考虑就是希望明年能够参加数学建模大赛,今年种种纠结放弃了,觉得万分可惜。明年也就是大三下学期的话我就会再来一次,而且还会更加坚定些。那么学习matlab的话对明年的计划也是有帮助的。在学习的过程中,因为以前学过access中的select语言,觉得就编写这方面是有共性的,但是matlab的编程语言似乎更多更复杂一点,这是由于涉及的数学模型,数学公式更多的原因。老师在讲解的过程中是通过一个个具体的金融例子来讲解的,而不是就matlab这个具体的软件工具进行讲解。这个给我带来相当大的打击,因为我发现我不仅仅是工具不能够熟练,涉及到的专业知识也是一知半解。这更加坚定了我要好好学习专业知识的决心,大学四年有几个人是希望荒度过去的呢?可是今年的这门课真的是让我感到没学到什么,估计也是因为我抱着看一看的随意态度来的吧,也没有那种遇到不懂的就一定要弄懂它的决心和毅力。说什么都是借口了,无法掩饰我没有学好它的事实。事实上,我觉得今年这门课的重点并不是让我们掌握这种软件的具体用法,而是主要向我们展示如何用它去解决一些金融问题,数学问题。这点让我很郁闷,因为我不懂得原理,听起来这门课倍感吃力啊。可是嘛,年轻没有什么不可以,又有谁可以断言我接下来的生活中不能好好学习这个东西为自己的工作,学习,生活,研究兴趣带来方便呢。
从大学开学的见闻到现在学习MATLAB,感觉这是一个很好的软件,语言简便,实用性强。作为一个做新手,想要学习好这门语言,可以说还是比较难的。在我接触这门语言的这些天,除了会画几个简单的图形,其他的还是有待提高。从另一个方面也对我们大学生提出了两个要求——充实的课外基础和良好的英语基础。在现代,几乎所有好的软件都是来自国外,假如不会外语,想学好是非常难的。其实想要学习好一们语言,不能只靠老师,关键是自己。每个人内心深处都是有抵触意识的,不可能把老师的所有都学到。学习这门语言,不光是学习一种语言,更重要的事学习一种方法,一种学习软件的方法,还有学习的态度。
总结一下,学习任何一门语言:态度决定一切。不论是英语还是计算机语言。其实以前上高中的时候接触过这种编程语言,当时记得最头疼的就是循环语句,但是在matlab中这种东西用的就比较少了。语言语句都是很简洁利落的,都是一枪瞄死靶心的那种,很直接,这也让我减轻不少心理负担。
其实学习这种事,与其说学习什么具体的东西,更不如说是学习一种态度,从种种波折中认识到自己的局限性,不足。心情会沮丧,也会豁然开朗。光想不练假把式,不论想的再多,不实际运用还是没有用的。书山有路勤为径,学海无涯苦作舟。华山再高,顶有过路。这就是我今年学习金融matlab的心得体会。