H$ M e5 p% \⑴提高图像的视觉质量,以达到赏心悦目的目的。例如,去除称之为噪声等图像质量的退化因素;改变图像的亮度、颜色;增强图像中的某些成份、抑制某些成份;对图像进行几何变换等,从而改善图像的质量,以达到各种想要的艺术效果。 & x* Z; g* U; N% C7 y * R/ |0 C4 i; [) p; K" O0 ~2 q⑵提取图像中所包含的某些特征或特殊信息,以便于计算机分析。如用作模式识别,计算机视觉的预处理等等。这些特征包括很多方面,如频域特性、纹理特性、灰度/颜色特性、边界/区域特性、形状/拓扑特性以及关系结构等。 d, j+ F+ M2 _ ) V! C& ^2 t9 a `) n⑶对图像数据进行变换、编码和压缩,以便于图像的存储和传输。 8 T, H2 q* h3 `) b$ S% e& y0 D! M4 R, ?( C9 H
1.2.3 数字图像处理的内容0 x+ N0 K J8 F' B) z/ I
9 S% R7 O4 A0 w, \) @: H
要有效解决众多的图像处理应用问题,必须研究出专门的图像处理方法,大致上可以将这些问题及其数字图像处理方式归纳为以下几类。0 H# K$ ^3 e* Q! m& s [
* l( W I. w T. n" c. d1. 图像获取、表示和表现(Image Acquisition, Representation and Presentation) " Z, e" W+ X0 j9 n% E( {9 d* ?/ @. n& W6 w: x4 D- i! y5 P
该过程主要是把模拟图像信号转化为计算机所能接受的数字形式,以及把数字图像显示和表现出来。这一过程主要包括摄取图像、光电转换及数字化等几个步骤。 ! ^4 Y9 C5 _- d' `1 k1 |0 e! N2 h' f
2. 图像增强(Image Enhancement)9 [+ G+ z3 ?, L) |9 x7 e
9 W" e; k7 p( u 图像增强是用来强调图像的某些特征,以便于作进一步的分析或显示。当无法得知图像退化有关的定量信息时,可以使用图像增强技术较为主观地改善图像的质量。所以,图像增强技术是用于改善图像视感质量所采取的一种重要手段。它所完成的工作包括去除图像噪声,增强图像对比度等。例如,对比度的增强是用来使对比度低的图像更容易显现其特征,而低对比度的可能原因包括光线不足、图像感应器的动态范围不够以及在图像摄取时光圈设定错误等。图像增强的过程本身并没有增加原始资料所包含的信息,仅仅是把图像某些部分的特征更加强调罢了。图像增强的算法通常是交互式的,而且与所考虑的应用有着密切的联系。/ c# v% i% d9 c. B9 l. C
1 j. I' z" A$ ]9 O 图像重建的工作是由几个一维的图像投影来重建出更高维的物体图像。它与图像增强、图像恢复等不同。图像增强和图像恢复的输入都是图像,处理后输出的结果也是图像。而图像重建则是指从数据到图像的处理,即输入的是某种数据,经过处理后得到的结果是图像。一个图像的取得是以平行的X光或者其他的放射穿透光束照射物体,并在物体的背面接收此投影,接着在同一平面上改变光束照射的角度以获得不同的投影,再以某些重建算法将这些投影组合成物体的一个横剖面图像。这种技术主要用于医学图像、雷达图像处理、天文学星象观测、地质研究及无损压缩等。 U' ]9 ~& @+ h3 _" e
) e$ I& M; Y1 F; z/ S5. 图像压缩(Image Compression) # m1 a& R" g: j! u+ z" r+ O9 e4 w ]
图像压缩的目的是降低代表数字图像所需要的数据量,这样做的好处是可以减少图像传输时间以及存储空间。编码是实现图像压缩的重要手段。图像压缩编码主要是利用图像信号的统计特性以及人类视觉的生理学和心理学特性,对图像信号进行高效编码,即研究数据压缩技术,其目的是在保证图像质量的前提下压缩数据,以解决图像数据量大的矛盾。一般来说,图像编码的目的有三个:①减少数据存储量。②降低数据率以减少传输带宽。③压缩数据量,便于特征提取,为后续识别作准备。 ) K, o& R" D5 r- M 1 w4 a* ]. L- a' r* r从编码技术的发展来看,Kunt提出了第一代、第二代的编码概念。第一代编码是以去除冗余为基础的编码方法,如PCM、DPCM、ΔM、DCT、DFT、W-H变换编码以及以此为基础的混合编码法。第二代编码法多为20世纪80年代以后提出的,如Fractal编码法、金字塔编码法、小波变换编码法、模型基编码法、基于神经网络的编码法等等。这些编码方法有如下特点:①充分考虑人的视觉特性。②恰当地考虑对图像信号的分解与表述。③采用图像的合成与识别方案压缩数据。 3 l/ l% }& O% w2 w2 o* [ + n, E$ Y7 f! g- F6. 图像分割(Image Segmentation)- V/ B# [3 r! H* P
9 l9 W' h M: U
图像分割就是把图像分成区域的过程。这是从处理到分析的转变关键,也是图像自动分析的第一步。图像中通常包含多个对象,图像处理为达到识别和理解的目的,几乎都必须按照一定的规则将图像分割成区域,每个区域代表被成像的一个部分。图像自动分割是图像处理中最困难的问题之一。人类视觉系统能将所观察的复杂景物中的对象分开,并识别出每个物体,但对于计算机来说却是个难题。目前,大部分图像的自动分割还需要人工提供必须的信息来帮助识别,只有一部分领域开始使用。例如印刷字符自动识别(OCR),指纹识别等。 " K, i" q' v {4 i6 [4 m! u7 ~6 P% S7 V' u* E" r( [; l( w) |
7. 图像分析(Image Analysis)6 q* t' N+ f! B% b( j3 f; N+ l6 L
$ l; J+ u: |( U5 a6 Z% u
图像分析是试图从图像中分割、提取并描述某些特征,从而有利于计算机对图像的识别和理解,以产生有用的信息。图像处理应用的目标几乎都涉及到图像分析。要做图像分析,必须使计算机具有某种程度的智能。这些智能的特征包括:①能从含有许多不相干细节的背景中找到所需的信息。②能从范例中学习并将所学知识应用推广到其他状况中。③能从不完整的资料中推断出完整的信息。; K/ ?6 c6 h+ i
! ?3 D$ O! ]/ j( H; P
1.3 图像工程 m1 O7 N N! X) | J& o# e- Q5 @1 D& z2 F1 m) L% u1.3.1 图像工程的内涵4 n1 c y7 h; P0 D) c* J$ H
# E4 E* m# w' Y9 `# J/ X图像技术在广义上来说是各种与图像有关的技术的总称。目前人们主要研究的是数字图像,主要应用的是计算机图像技术。这包括利用计算机和其它电子设备进行和完成的一系列工作,以及为完成各种功能而进行的硬件设计及制作等方面的技术。计算机图像技术的历史可以追溯到1946年世界上第一台电子计算机的诞生,但在20世纪50年代计算机主要还是用于数值计算。到20世纪60年代,第三代计算机的研制成功,以及快速傅立叶变换算法的发现和应用,使得对图像的某些计算得以实际实现。20世纪70年代,图像技术有了长足进步,而且第一本重要的图像处理专著(Rosenfeld 1976)也得以出版。进入20世纪80年代,各种硬件的发展使得人们开始处理3-D图像。, F, i- o. i3 _
/ _$ l2 q4 g& K
由于图像技术得到了极大的重视和长足的发展,人们需要对它们进行综合研究和集成应用,由此出现了图像工程。图像工程的概念在1982年首先提出,当时主要包括有关图像的理论技术,对图像数据的分析管理以及各种应用。图像工程的内容非常丰富,根据抽象程度和研究方法等的不同,可分为图像处理、图像分析和图像理解三个层次。换句话说,图像工程是既有联系又有区别的图像处理、图像分析及图像理解三者的有机结合,另外还包括它们的工程应用。& ^7 W! D2 g T! k8 O# V
4 u- e% j/ t' o# _# A: \5 J9 L
1. 图像处理3 X3 L" A5 ]# Z
$ ]' {/ e# C; q9 w& A& z
图像处理的重点是图像之间进行的变换。虽然人们常用图像处理泛指各种图像技术,但比较狭义的图像处理主要是对图像进行各种加工,以改善图像的视觉效果并为自动识别打基础,或对图像进行压缩编码以减少所需的存储空间。6 d+ ~% b$ z( h/ r
1 R$ c1 J( ? J. V
2. 图像分析 ; D' K# u) c5 n9 V% O; h) U( z9 r! L$ @3 O8 X1 a# C# c5 d+ k
图像分析主要是对图像中感兴趣的目标进行检测和测量,以获得它们的客观信息,从而建立对图像的描述。如果说图像处理是一个从图像到图像的过程,则图像分析则是一个从图像到数据的过程。这里的数据可以是目标特征的测量结果,或是基于测量的符号表示,它们描述了目标的特点和性质。 ( h7 }# f8 L$ A; j, W' ^ # U( z; q" G- q0 j t& F) U3. 图像理解 p+ n# |' r8 D% u0 B, S- z7 I& I$ m0 Z! V7 x
图像理解的重点是在图像分析的基础上,进一步研究图像中各目标的性质和它们之间的相互关系,并得出对图像内容含义的理解以及对原来客观场景的解释,从而指导决策。如果说图像分析主要是以观察者为中心来研究客观世界,那么图像理解在一定程度上就是以客观世界为中心,借助知识、经验等来把握整个客观世界。# c3 Y) b) k7 T- M$ z r% p: k5 a
5 {/ B4 a6 U. G, X/ ^# \
综上所述,图像处理、图像分析和图像理解是处在三个抽象程度和数据量各有特点的不同层次上。图像处理是比较低层次的操作,它主要在图像像素级上进行处理,处理的数据量非常大。图像分析则进入了中层,分割和特征提取把原来以像素描述的图像转变成比较简洁的非图像形式的描述。图像理解主要是高层操作,基本上是对从描述抽象出来的符号进行运算,其处理过程和方法与人类的思维推理有许多相似之处。% E+ r$ {+ E- o+ ]9 a5 z1 X1 _. K
' U5 K: y: Y* Z1 Z$ I/ K2 m ?1.3.2 相关学科和领域 # R: p; e7 A2 P5 W! i6 H& Z 4 L2 ^6 `+ N- R图像工程是一门系统地研究各种图像理论、技术和应用的交叉学科。从它的研究方法来看,它可以与数字、物理学、生物学、心理学、电子学、计算机科学等许多学科相互借鉴。从它的研究范围来看,它与模式识别、计算机视觉、计算机图形学等多个专业相互交叉。图像工程的研究进展还与人工智能、神经网络、遗传算法、模糊逻辑等理论和技术有密切的联系。它的发展应用与医学、遥感、通信、文档处理和工业自动化等许多领域也是密不可分的。 , f7 b& X- Q$ c8 ~- N* P6 _1 H. M! {) |% z" q* g; H R
图像工程与计算机图形学(Computer Graphics)、计算机视觉(Computer Vision)、模式识别(Pattern Recognition)等有着密切的关系。图形学原本是指用图形、图表、绘图等形式来表达数据信息的科学。而计算机图形学研究的就是用计算机技术生成这些形式的理论、方法和技术,即由非图像形式的数据描述来生成逼真的图像。它既可以生成现实世界中已经存在的物体的图形,也可以生成虚拟物体的图形,它和图像分析的对象和输出结果正好对调。从狭义上讲,模式识别指的是把基于特征的多维模式空间分成不同类别的识别理论。特别是指不依赖于图形和图像,适用于其他一般的模式分类的理论。模式识别和图形分析比较相似,只是前者试图把图像分解成可用符号较抽象地描述的类别。计算机视觉主要强调用计算机实现人的视觉功能,要用到图像工程三个层次的许多技术,目前的研究内容主要与图像理解相结合。 ; ]" N; H$ j s6 e8 @3 H; `, t : h; I, w( G3 J4 F/ o1.4 数字图像处理的应用 + ~' i( S6 m! n1 H , Q \$ L2 Q; H/ V4 Z概括的说,数字图像处理技术的主要应用领域如下: : i g: n$ `. H7 h, ?9 _3 R( K2 K4 r& Y- b
⑴通讯。包括图像传输、电视电话、电视会议等,主要是进行图像压缩甚至理解基础上的压缩。2 I0 N+ _' C1 X) l& Q" C
0 v# @/ w* s* ^# N4 j' k
⑵宇宙探测。由于太空技术的发展,需要用数字图像处理技术处理大量的星体照片。 # O& Q, L9 o% [/ e0 l . Q1 y2 H2 q0 B( @; _. G6 [⑶遥感。航空遥感和卫星遥感图像需要用数字技术加工处理,并提取有用的信息。主要用于地形地质分析,矿藏探勘,森林、海洋、水利、农业等资源调查,环境污染监测,自然灾害预测预报,气象卫星云图处理以及地面军事目标的识别等。由于数据量庞大,因此寻求处理及分析这些图像的自动方法,特别是图像对比度增强、分割及图像识别的技术显得极为重要。 , W& h* Z7 C6 L 5 U- _8 [# T8 `7 f/ C3 X⑷生物医学领域中的应用。图像处理在这一领域的应用非常广泛,无论是临床诊断还是病理研究都大量采用图像处理技术。它的直观、无创伤、安全方便等优点备受青睐。图像处理首先应用于细胞分类、染色体分类和放射图像等。20世纪70年代数字图像处理在医学上的应用有了重大突破。1972年,X射线断层扫描CT得到实用;1977年,白血球自动分类仪问世;1980年,人们实现了CT的立体重建。医学图像的种类包括X光图像、同位素图像、核磁共振图像、超声波图像、红外线图像以及显微图像等。对这些图像作对比度增强或伪彩色等的处理可帮助医生诊断疫病。 , X" A! n2 }! }: V! l4 z6 P2 \: Q) a8 i
⑸工业生产中的应用。在生产线中对产品及其部件进行无损检测是图像处理技术的一个重要应用领域。这一领域的应用从20世纪70年代起取得了迅猛的发展,主要有产品质量检测;生产过程的自动控制;CAD和CAM等。. K8 f7 k, M4 l
* ~: G6 |8 U6 B2 ~- T# Q
⑹军事、公安等方面的应用。例如军事目标的侦察、制导和警戒系统、自动灭火器的控制及反伪装;公安部门的现场照片、指纹、手迹、人像等的处理和辨识;历史文字和图片档案的修复和管理等。 9 u1 y: E* E7 N7 B. J. j0 l5 h/ s1 P
⑺机器人视觉。机器视觉作为智能机器人的重要感觉器官,其主要任务是进行三维景物理解和识别。机器视觉主要用于军事侦察或处于危险环境的自主机器人;邮政、医院和家政服务的智能机器人;装配线工件识别、定位;太空机器人的自动操作等。6 q H5 F1 Y& \; u
0 E3 u" |- O! b! F
⑻科学可视化。图像处理和图形学的紧密结合,形成了科学研究领域新型的研究工具。例如考古学可用图像处理方法恢复模糊或其他降质状况的珍贵文物图像。 8 Q. U) |& M0 j' @( k& [ ( l; Y5 p0 j6 {3 A& g. Z) h⑼视频和多媒体系统。电视制作系统中广泛使用图像处理、变换、合成;多媒体系统中静止图像和动态图像的采集、压缩、处理、存储和传输等。% a. O0 B/ |' B
# W+ x* s; ~& z' T" G⑽电子商务。图像处理技术在这一领域大有可为,如身份认证、产品防伪、水印技术等。9 P+ X4 V; J8 a; Y8 v
7 @" E) k& @+ G
1.5 数字图像处理的发展方向* T6 B/ _" Z( n5 F( ~* R
( Y- X4 b6 E9 f; ]+ R" B8 w% u
目前图像处理面临的主要任务是研究新的处理方法,构造新的处理系统,开拓新的应用领域。需要进一步研究的问题有如下几个方面:; u& I V0 W1 R
6 k; C+ |; w/ p/ X' f8 u⑴在进一步提高精度的同时着重解决处理速度问题。 ! i# X1 A' G P1 r4 d2 p" w+ R! u& z. c2 b$ [9 g
⑵加强软件研究,开发新的处理方法,特别是要注意移植和见解借鉴其他学科的技术和研究成果,创造出新的处理方法。 / \7 k* p& z7 ?. v- b7 Y - |) c6 N i; E' B; z7 k: @ E⑶加强边缘学科的研究工作,促进图像处理技术的发展。6 X: n" ^6 v( y: X) h
! p, Q9 N0 @/ t% ^2 n⑷加强理论研究,逐步形成图像处理科学自身的理论体系。 7 I+ v) l( |2 N; v 8 r$ t- ?3 t# S, O" E4 N( ]( A9 C⑸图像处理领域的标准化。* H- f* f' T# f6 b Z
" c; W/ R) l$ R图像处理技术未来发展方向大致可归纳为: ' o$ c- `: X3 k6 R6 g3 Q * s9 ^. K' U1 B7 D# h1 z. n% a⑴图像处理的发展将围绕高清晰度电视的研制,开展实时图像处理的理论及技术研究,向着高速、高分辨率、立体化、多媒体化、智能化和标准化方向发展。% O; G1 V. d+ X" C
' r4 U0 H( u5 q3 D
⑵图像、图形相结合,朝着三维成像或多维成像的方向发展。 ( y5 l; J* e, C$ n7 N1 e5 X; z% w7 ~- B3 p/ ^6 I' W& {3 g% x
⑶硬件芯片研究。把图像处理的众多功能固化在芯片上,使之更便于应用。 9 h6 t7 N5 _/ e8 R+ Y: [ ; u& K8 d+ M& A# V" G% K7 d⑷新理论与新算法的研究。近年来随着一些新理论的引入及新算法的研究,将会成为今后图像处理理论与技术的研究热点。例如小波分析(Wavelet)、人工神经网络(artificial neural networks)、分形几何(Fractal)、形态学(Morphology)、遗传算法(Genntic Algorithms)等。 a1 l. K; ^9 d; b& E" Z
- L( N- }# o' V" n" L# ?( F' x
随着科学技术的进步以及人类需求的不断增加,图像处理科学无论是在理论上还是实践上,都会取得更大的发展。+ Z- _) E. {( c4 H$ C" h: U* x7 t& d
8 e/ i* \7 E$ ?- b1 r1 U $ e$ Y; V4 `% l K4 J; s: m/ V3 u4 n2 h# x
MATLAB图像处理基础 ' k0 A+ s) G0 k& K& z" b6 H9 N4 B" |5 @- w4 d E
0 Z: {$ p6 Y! N3 E" i7 K
4 [! l3 ~* k4 t- l
2.2.1 图像文件格式及图像类型; d- H& }1 j" n" N
7 L0 O) N8 {4 C& X9 R p+ U
1.MATLAB支持的几种图像文件格式: 0 H, |4 d- w8 w' E( r3 w. I$ o4 b, k
⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式。2 w+ R. P* x: r3 i" X# I
' }) |7 Y8 @! uimwrite(A,filename,fmt)% h- e' p$ r2 i) E: I
8 R( K' |. W- W" Uimwrite(X,map,filename,fmt) g; U9 s, L. P Q0 } G S* z; B6 B( F$ nimwrite(…,filename) & f* }2 m! z+ W8 G+ r+ n 3 w5 o5 Y2 m' T# S9 eimwrite(…,Param1,Val1,Param2,Val2…); t8 c. ^2 n, |# e; I$ h- q
; S6 d1 f% U1 s* ^
其中imwrite(…,Param1,Val1,Param2,Val2…)可以让用户控制HDF、JPEG、TIFF等一些图像文件格式的输出特性。 . g/ d1 b' k0 y. O6 c# F3 L! K! Y( A6 x% N( y2 |
在MATLAB中,默认的保存类型是uint8。由于PNG和TIFF格式支持16位的图像,所以保存这类图像时,保存类型就是uint16。 ; c! U2 r, S3 ?* L5 A! K D% ~6 I: u/ n) X2.2.4 图像的显示* ^6 U0 M( a' w, a
$ [9 `1 m( i& e4 Z$ }/ l; Q* R显示图像的最基本的手段是使用image函数。该函数还产生了图像对象的句柄,并允许对对象的属性进行设置。此外,imagesc函数也具有image的功能,所不同的是imagesc函数还自动将输入数据比例化,以全色图的方式显示。0 g, ?4 D4 f& i" l& d1 o8 k4 q& c
% i) G- w5 h4 F- g3 v
imshow函数比image和imagesc更常用,它能自动设置句柄图像的各种属性。imshow可用于显示各类图像。对于每类图像,调用方法如下:* L. G, K, j" p2 {# h9 R
* M# X6 e; k! b- h, G
l imshow filename:显示图像文件。% |% r+ C. m( t% f
* G/ Z* ^1 l( Z. C* ~" ol imshow(BW):显示二值图像,BW为黑白二值图像矩阵。9 k+ a5 m; j0 b- {4 n+ Y
. z7 n' G9 b) Q+ x
l imshow(X,map):显示索引图像,X为索引图像矩阵,map为色彩图示。& c4 ]% q# {- Q2 [
: M4 r+ P8 L j2 S7 b/ G$ b
l imshow(I):显示灰度图像,I为二值图像矩阵。 5 i7 E# @ W) D6 X 6 b$ V8 l7 T, G w/ M2 {l imshow(RGB):显示RGB图像,RGB为RGB图像矩阵。 4 S8 \9 X( A% \! }& @1 B: z. K- m3 r3 A9 z% h7 o1 g; C
l imshow(I,[low high]):将非图像数据显示为图像,这需要考虑数据是否超出了所显示类型的最大允许范围,其中[low high]用于定义待显示数据的范围。/ G ?. c: t9 o! i) q( A+ O
( J$ d1 v. [- u+ r$ r
有关图像显示的函数或其辅助函数,除了上述的以外,MATLAB还提供了一些用于进行图像的特殊显示的函数。 # O5 C8 V$ X: ~- `1 I; |1 u0 z + ^# O" ]" [1 R# m0 H% x: s* zl colorbar:为图像的显示增加一个颜色条,这一用法对于了解被显示图像的灰度级别特别有用。 ' a4 a8 }: v. {7 q / g" D$ I9 _7 p2 J% V' al getimage:获取图像数据。7 i. S/ N1 D' p x4 \) h" u7 m& @
! e' n/ U" a0 e- J& T" al immovie:将多帧索引图像制作成连续图像格式。其调用格式为:) }9 d. T# w4 N( P
$ d2 _6 C+ c. a/ F, W/ X& k0 D
mov = immovie(D,map)' I, H3 M. M2 }4 c+ `7 l* N, N
9 |7 ^, _$ U2 U8 K不过这种功能只对索引图像有效,其中D为多帧索引图像阵列,map为索引图像的对应色阶。对于其他类型图像,则需要首先将其转换为索引图像。 6 k8 V v! k( Y2 X& z1 |" }. D- P- G% N/ g9 ?$ \" T: r
l montage:多帧图像的一次显示。它能将每一帧分别显示在一幅图像的不同区域,所有子区的图像都用同一个色彩条。: R" F; N! N, U+ M! K# E# {2 a
0 O+ l/ m3 R1 E8 J" Q c% n Gind2gray() 将索引图象转换成灰度图象 0 R' L' ^; h8 H2 A! g. u1 `1 t/ x2 w: O7 \
ind2rgb() 将索引图象转换成真彩色图像 / W! g+ p3 S2 F& s+ V 5 p: L' _% Q. h( r- m( Y1 z6 ymat2gray() 将一个数据矩阵转换成一幅灰度图象/ y7 R& X; V; c# q2 p F0 H2 Y) g: b* f
3 V0 n6 F! P g I" ^ ^; \
rgb2gray() 将真彩转换成灰度图象 # U, X! S, A# k @/ @* V k: ` ) |3 p% V; O7 w/ \8 Mrgb2ind() 将真彩转换成索引图象 2 T( F; ~3 P# k( B& y ; m; e$ ]: \& g/ P图像类型与类型间的转换! ^& B2 C+ r' d# v( K
' X0 E% h7 }- B' U1。索引图像:包括一个数据矩阵X和一个色图阵MAP。矩阵元素值指向MAP中的特定颜色向量。! e3 C8 _" t6 Z
1 w: p/ h$ ?9 x c% |
2。灰度图像:数据矩阵I,I中的数据代表了颜色灰度值。矩阵中的元素可以是double类型、8位或16位无符号的整数类型。4 K8 U: R: U3 a, P, O
8 R3 l* H: y- I% u3。RGB图像:即真彩图像。矩阵中每个元素为一个数组,数组的元素定义了像素的红、绿、蓝颜色值。RGB数组可以是double类型、8位或16位无符号的整数类型。 5 z) i1 P/ R) y& q" F6 p * q; h$ k& e. z7 y4。二值图像:一个数据阵列,每个象素只能取0或1。" o' p! s" H! F! j
/ _$ t( n6 g- f/ c7 F- T7 k" l4 ^矩阵的基本运算 8 P, n0 o; S4 q" h! A3 ~% U2 Z$ V# q6 N; n. z* p r6 l
行列式求值:det(A)1 o+ j) R0 [/ _0 Q
. R2 g- U4 R/ G. v1 |2 q# P! o/ P
矩阵加减:+、-9 S! e/ g9 l* H' P( z: b' l: I
: M9 B! V# K" c/ E2 @, j. L0 @! s; i矩阵相乘:* B6 P7 N5 P# t* s- p8 I0 E; [' f ; y9 }4 H2 M/ s, z, M! }% h) {矩阵左除:A/B %相当于inv(A)*B7 u. P% w, x' a& n' W" ^) \% W# J: `
* q5 R9 r+ m/ r, z, ]7 g( a4 h: E
矩阵右除:A\B %相当于A*inv(B) 6 f7 R. T. ?4 a. V' r: T$ _, Y8 w# ?2 e0 K+ H- F
矩阵的幂:^* I( J# J/ A1 l% V# j |
2 c. |7 E8 c) {
矩阵转置:' - n i! @. N1 ?! s9 m1 |* e' K ) r3 f/ n% L3 k6 S+ `矩阵求共轭(实部相同,虚部相反):conj(X) 0 d$ _" ?2 @8 H$ l: b* l1 _- s4 U8 ^4 _1 T/ k7 @
矩阵求逆:inv(X) 5 L0 }+ n0 S. y1 O/ s 1 |2 A1 s4 m3 o: L级数的求和与收敛 3 p# K! z8 S$ a7 W+ K( o ! ^3 H% |$ n" q3 P+ m) Ssymsum(fun,var,a,b):其中fun是通项表达式,var为求和变量,a为求和起点,b为求和终点* |( O; m w6 g$ I
$ F7 |4 l% }6 J! x3 f/ y例如:I为1/[n*(2n+1)]从1到正无穷的和,求I8 D4 h }; j( d0 P1 d
o# k% \2 ?4 T) ]% t8 b6 v
syms n;. U0 Z" Y! a& }7 m/ H* O# p. j
) O, h2 {- V2 {5 gf1=1/(n*(2*n+1));4 q% K& T# m( h2 X( f& E
, S% @6 c( k" Z# `7 y% EI=symsum(f1,n,1,inf) - n1 m5 ]: o, }, z" m w) E# ?3 O) L7 h
计算结果为:' V; n. j& {" c0 i. A! B& N) ]
1 ` o4 M. U. J/ `& O
I =2-2*log(2)' p! O7 e, {5 g3 l
' ^. d3 D, m) y" V/ x2 x1 A3 Q空间曲面( X; ?9 Q7 K% N3 m& c& p
+ R3 _4 J3 z/ X' s# _5 E `
mesh()函数语法:2 G- S( ]. G1 d3 }1 R. v
1 N1 `5 K7 x+ ]4 W, Y
mesh(Z):: Z1 C3 A" q( m) v0 X5 G
, z5 U) r5 K: G5 N( w
mesh(X,Y,Z,C):其中C是用来定义相应点颜色等属性的数组& o( v) a: y" E; v8 [
" E3 g) H. w: ^* G' [% m7 e; q
例:求x^2+y^2=z的空间曲面 : o9 ?* V' } p1 d $ X; ]/ D7 |: y. d6 bx=-4:4;9 l# k2 n. Y$ c6 B. ?! }; R
) o5 \0 U! D" A" d, O
y=x; ' ` Q1 v: x7 l }' o- z m * w6 _, G; b0 V/ _/ l[X,Y]=meshgrid(x,y);%生成x,y坐标 h% T6 p) c1 F( N
9 ~* G0 Y$ f% Q# y0 D0 Q
Z=X.^2+Y.^2;( a0 A1 ]2 k- F) Z) [9 S
/ Z* r' W* L) t* q( e8 g9 m
mesh(X,Y,Z) ! J$ W( ~: q2 O7 [3 E" \* ~9 c& J5 i 6 O1 L2 I y% b% O( R4 E: R- C曲面图- P6 J+ C6 P& W7 s
/ ^+ {# k: A( ]. A2 c3 h
[x,y]=meshgrid(xa,ya) 当xa,ya分别为m维和n维行向量,得到x和y均为n行m列矩阵。meshgrid常用于生成x-y平面上的网格数据; 6 c1 T( s. f. Q4 K5 c( S+ ~2 W ' u& s: z% p; c( H0 F3 ~1 Hmesh(x,y,z)绘制网面图,是最基本的曲面图形命令,其中x、y、z是同阶矩阵,表示曲面三维数据; , B. `# O# L, v2 I2 @8 ?9 }5 j. e" T- j% `, m. K1 ]
mesh(xa,ya,z) xa,ya分别为m维和n维向量,z为n行m列矩阵。等价于先[x,y]=meshgrid(xa,ya)再mesh(x,y,z); ( V7 v$ `( _* @8 r( J+ i8 d# t ' e7 U+ E% g( p) ]surf(x,y,z)绘制曲面图,与mesh用法类似;9 W3 V+ H9 b' q+ h+ f9 d1 g1 v7 P
) q [/ f, \; W* v! X! y/ h/ R
contour(x,y,z)绘制等高线图,与mesh用法类似,可指定z的范围; ' } g# F# f [/ M 5 W7 R8 ~! Q3 J# p* D, }2 tcontour3(x,y,z)绘制三维等高线图,与mesh用法类似,可指定z的范围。: s. r3 q5 ?9 P" d
( H, ^( U6 f3 O: M+ I) j
空间曲线& f: W& r9 K5 X0 l/ G! o
. K# K5 D0 @4 y4 h1 S2 zProduct: MATLAB 6.0 ==> Current Version2 u, r8 P' @ n. P
+ S6 J. h, e$ V( F2 e. fPlatform: Windows ! G/ F5 [# l, [. A2 N4 y& H/ f* `# f
Problem Description( \4 U" |- C/ ~, h+ B* J
) D! c3 c/ b" G; |) U! r% T+ }6 H5 [
Why do I encounter problems when running MATLAB 6.0 (R12) on Hebrew ' a' C$ {& }6 Q& ?. Y7 m! Q: n" e1 Q: u& e) F- G
or 4 `3 v# S2 p! n {% f9 \. u, P- r - M# s8 u' C; Q2 t+ w4 h0 Q/ aTraditional Chinese (Taiwan) Windows? I try to start MATLAB but after 2 H9 d" B; x* E& f7 D" O * w6 a( c* Y |* ^* O6 E# w1 z' Sthe splash screen disappears, MATLAB exits. ( \: N6 m Z6 c+ z2 j" Y* W! k8 J0 L6 \0 O$ B
PLEASE NOTE: This solution only applies to MATLAB 6.0. If you have a 4 s9 y5 P& l: T2 Y7 ] # \* G: P* d6 S; w( Isimilar problem with MATLAB 5.0 or the Student Edition of MATLAB 5.0, 7 @, j2 `: i2 Q4 K) E/ h1 Y6 `; v i$ J' \ ?3 f2 y5 T& ^
see solution 7213.& ~, O! f* p: E0 A
3 J3 ~7 o" v* D0 \* q! u* D: ~
Solution: 5 }' ?( F; \# n% C+ F: n8 B5 v, N) \& j
This problem is caused by a bug in one of the font properties files we ship $ f- c, j: U4 h; K, @ j' d, G/ ^* [3 d
with MATLAB. The font.properties file is used by Java to map the standard . X7 p. Z/ @4 E! V4 }: X# T; r; N' t" R
Java font names to system fonts for a particular language operating system., n9 H$ P# f7 I4 P0 W9 g
2 {' |/ @9 [; I9 a
However, we made a few assumptions that do not hold for the Hebrew or9 W9 W; L! ]/ O- K. t6 A2 W3 x
$ U$ N* h7 Z* f: @$ ]- p4 e
Traditional Chinese Windows, causing this problem. ( ?" q# O& J) O* @/ G2 K0 Y) r/ l8 M3 B& n% |
We have created a fixed version of the mwt.jar file that you can use to . L; ~' M a9 {5 l$ `5 { 9 K& Y( V" d( K# q2 y- ~correct this. To use the fix, first rename your mwt.jar file as mwt.old. : e* I% g. n& A 6 |8 N5 ^8 C: o6 Y& S5 F! fThis file is found in the $MATLAB\java\jar directory, where $MATLAB is your: c" t7 x0 n) u. q- y0 X9 l
$ _% T: v: h: u& k7 T3 t9 CMATLAB root directory. Then download the newer mwt.jar file from:) v0 z( B/ D8 k) m& U
% {( T3 I0 r2 T! V) |' W: [ftp://ftp.mathworks.com/pub/tech-support/solutions/s26990 * y- [& k/ x7 Z/ t ' c9 F& h0 f9 L& v' \8 Yand place it in your $MATLAB\java\jar directrory. Then restart MATLAB; ) e" Q' `. S9 Z" m; x5 |; C0 d8 z% d- E
this should correct the problem you're seeing.) p1 v/ {8 N b5 o( D F
0 c+ n1 ]0 H* A" x2)我有一组x,y,z值,非规则排列,如何在Matlab中绘图?0 T* t0 x% z8 F: w# B S( W% c
" f$ F2 y; W F" J# h# ?1 t1 c|x11,x21,…xm1|, @% Y" D2 {% p0 \$ r- K' e1 n% j, c
/ K( E3 j5 t" N
A=|x12,x22,…xm2| 3 L$ P. O7 g) ?: \0 | O0 m: @: u- ~* K+ A9 O1 ?, _6 r
|…………… |( m9 t* {& e% s9 l( V
0 n, I Y' g( V# P8 I1 A
|x1n,x2n,…xmn| 7 v: n% w9 G# C# V3 k6 P 9 l* K4 f" a! X" j: c9 vY={y1,y2,y3,…,yn}' $ E O2 b- l- B/ m1 l6 O$ ~3 }$ [/ r6 a; f# X
则系数{a1,a2,…,am}'=pinv(A)*Y& d: a; T* h ~* m4 ^' S! F C
4 ~- ~& p2 l& e
在matlab中使用; V7 ?% c( `, c( e0 F- [3 G/ o' g
* r2 f7 E, ^- n+ z7 N, w* ~coeff=A\Y * Q- u ?: J; m4 B0 [7 p3 q/ q% p9 r* a, _4 }
则可以得到最小二乘意义上的拟合系数 , H2 u: v, H' o X( w# U9 t( s. Q8 J% J
7)Matlab中如何作圆回归?8 n! S2 ~ p+ o1 s- ~5 X" L! U( k
4 k1 R" l) }% g:#Peter Boettcher (boettcher@ll.mit.edu),2002/5/16, comp.soft-sys.matlab#* x [. y; Y3 b
2 M, y" r n( n( y
Q5.5: How can I fit a circle to a set of XY data? : S: n7 I# x5 N. ]9 l4 |' }' |% r: |
================================================= w, A/ g8 W& f" N ' } n6 J3 D! H; FAn elegant chunk of code to perform least-squares circle fitting was 3 d5 |* o2 l. [. I$ p+ \' n; p( q0 K9 E/ D n
written by Bucher Izhak and has been floating around the newgroup for , J2 \( }8 p" A* r0 i8 A0 f7 ?9 A7 u( o/ q [
some time. The first reference to it that I can find is in:) U4 o5 Q( I5 W7 \! S4 G
; N8 I4 i& m' z! dfunction [xc,yc,R,a] = circfit(x,y)7 g: H+ z* {8 X: ?. E5 J
6 `- F' M2 [, q* {
%CIRCFIT Fits a circle in x,y plane2 x$ I/ R2 R1 \% {
2 ^2 J' x! w- R' Y# a& V
% . @. i, Z: w$ M" Z; U% h% u h8 Q$ N- P! {0 r. ^
% [XC, YC, R, A] = CIRCFIT(X,Y) 1 s+ L: F2 k4 ` & ~1 r; K1 g; v( D7 m% Result is center point (yc,xc) and radius R.A is an optional) e1 k/ S/ O6 G) j8 b4 c
1 m( w. y4 K) h
% output describing the circle's equation:, E. |( p' F) A% f# U
1 o, J6 n6 k; d+ _1 P
%$ n+ U, \9 N- L/ B. R0 A, B6 v
& A2 _5 F! \: A' ?- s% x^2+y^2+a(1)*x+a(2)*y+a(3)=0 ; F5 j. \& H4 s) v & M7 N9 s+ u$ Y+ C* o% X. }/ ?% by Bucher izhak 25/oct/19916 Q7 n: \2 a' G7 T& W, O
6 p p# c K5 v! q7 j& M
n=length(x); xx=x.*x; yy=y.*y; xy=x.*y;7 }0 o: ]2 a- j/ n: f
4 m+ D' O6 \+ r8 FA=[sum(x) sum(y) n;sum(xy) sum(yy) sum(y);sum(xx) sum(xy) sum(x)]; : y3 Y5 ?$ C+ C7 @1 X 8 v8 i K' {# q: ?$ D/ U9 qB=[-sum(xx+yy) ; -sum(xx.*y+yy.*y) ; -sum(xx.*x+xy.*y)];: B( |6 h0 x- {0 X
: q& n" {% o% ~+ S; e6 T
a=A\B;2 L5 D0 P R, N/ b& w
+ {' ~8 Q8 W" |8 G* i! Nxc = -.5*a(1); + x h( O- N2 X H9 O& ` ! B$ s( S8 r! ]3 f. G2 Iyc = -.5*a(2);% |5 j7 g9 K) }7 t1 M( S
: H* l) A9 [6 s2 u: _- X( s
R = sqrt((a(1)^2+a(2)^2)/4-a(3)); 2 r% R5 m4 d5 I; a8 G6 p9 I! V5 s* `' ~0 n8 L2 Y
Tom Davis provided a more sophisticated approach that works for more* n7 o+ P4 C: [- R8 d4 c# ?! q
2 P6 u" v/ X* e/ N V
cases in and Code included. - \. A7 b* c9 \0 k# Y8 i C0 `1 B$ u N5 v5 N( }5 |# [# F; r& {
8)Matlab中如何绘制箭头?: L) B+ {0 I4 _9 h
1 W/ {( N' W- f# U. b在Field菜单中有3D Iso-surface Details和3D Slice Details,可以绘制等值 9 ^7 U$ Q4 i6 C 5 }" M; r! A1 w) \4 c面和任意平面的截面图。& u, v. P6 W U( Q9 m8 ^
! H! G, Y9 x' M3 D. q11)Matlab中如何注解一大段代码?+ X }7 j" w/ g% L' c! m% `
2 S3 M4 }/ d0 Y/ t, O:#misc,2002/6/21, SMTH/MathTools # - ^( S4 D6 e0 @- U! I y 2 k- i. x* @( |if(0) y3 a1 p, P3 V5 L* ^
. h/ }1 E: C# S! H- ]4 {, e
大段的代码 $ a) J$ S' X' e9 q7 k" X1 ` w/ v! j& y' E
end : e9 P& e, _1 R# ^7 _3 v7 v9 T1 l% u8 n0 ]7 u
12)Matlab中如何计算程序运行的时间?/ X6 G$ S/ A' r1 ~: s- G
! i6 e. T3 |+ V, M# i; B
:#misc,2002/6/21, SMTH/MathTools # % T$ A& K7 h6 O4 o" C/ p : _4 X7 ^9 @# r/ S7 H7 ^3 Mtic1 K2 f' ], ~" U1 d0 d; H2 H
2 A" }/ u3 Y2 R2 vyour_code;2 h& u7 r. n4 J) m" A& q# i
2 n6 T8 H! o" C ~$ \+ t. o
toc+ F! @% L9 N/ O! p9 d# ]
4 [. R: e! |5 z8 q" Y+ Q8 I( N, e
或者使用 1 Z1 ?% ]5 `9 `( L6 Q 0 ]) ?! ^9 |' e' U4 r; rt=cputime; - v) H0 S' K3 R% `5 b; x9 J! x9 j% m; w. R$ `4 ^
your_operation;2 a7 D0 M0 a* ?3 V4 Z3 Z& t" ?
* w) w* }3 C1 e" {7 O: h+ V. P
cputime-t: q2 J/ X( [ e4 M" M/ u- G" h6 F. X' C
I+ t7 W1 a- x+ L) u
13)Matlab中如何改变默认的工作路径? . O6 g; R) x* C7 Y5 G 3 j" c3 Q- q: Y0 ]( g, c:#SindyGong, 2002/4/7, SMTH/MathTools #7 y0 m0 A5 X3 x
* @ r3 M# l( h: w) ?/ P
编辑一个startup.m文件,其中cd yourpath, J$ k) l. {- ~ {, }$ S
: s- d7 y2 T# |9 J$ _: S; u或者在X:\matlab\toolbox\local\matlabrc.m的最后添加cd yourpath 5 M/ U$ t2 w7 A B% a4 L" L, T2 e7 s8 Y3 F. R) F
参见:! @, F9 r# ]% T- Q' q/ p3 E
9 l7 f. t1 N- K3 Q- e$ ^ http://www.mathworks.com/support/solutions/data/25164.shtml ( ]# A7 `, |4 J6 B [+ z/ U, V
14)Matlab如何改变默认的图形字体? ' d7 b$ @$ i! J2 G( T+ f+ L! I7 U( @3 h! H
:#comp.soft-sys.matlab FAQ# ' F2 B4 R7 U5 _3 G1 t6 d% i3 n# b A! b4 Z: ]
编辑一个startup.m文件,其中3 P% Q' ?$ p# I9 y) ^% g
( C* T6 Y! q# H& r( ^8 |set(0,'DefaultObjectnamePropertyName',value) 4 Q3 I" m; f8 @4 I2 M n- S" P- l # T: ~6 H4 P. m0 a" n `7 C或者在X:\matlab\toolbox\local\matlabrc.m的最后添加 1 [7 |: H! f3 A ( i8 ^$ s6 V! \( x4 @, @. nset(0,'DefaultObjectnamePropertyName',value) ! Z; _/ H4 G6 }2 M3 ^9 Q' Q' g( j( z' G$ K! b
15)如何在Matlab中实现交互操作?: J" R8 k! \/ J' q0 n: R) q% K" z( q
$ S2 a! G5 m+ H; d2 T
:#FangQ(Qianqian.Fang@Dartmouth.Edu),2002/6/21,BigGreen/MathTools #* _* D# V% ]% o( \# A2 Y( f
r: x C1 ]3 m. x8 j* M5 z' i& {
如果只在命令窗口进行交互操作,请参见demo中的例子,主要是; s9 C" I6 o) u9 K4 N
( |" j( a; W; w- V0 P, F
通过input命令和pause/clear/disp等实现的,还有一些窗口资源可以使 - S S& J( h6 u" |! ?5 l- b2 R( [) L3 c2 _4 N. Y# l
用:& D/ k3 A- R/ v# V7 N
5 A y8 h) r) G* C$ buigetfile,uiputfile,uiwait,uisetcolor,uisetfont, uiopen,uisave 2 S$ G) ^- d' V/ q2 ?6 p' _, x5 W- |" u+ q2 V( H
inputdlg,msgbox,helpdlg,questdlg,warndlg,errordlg $ K- s5 V" R( Y6 h- E' M * B8 `, {' U) g3 X- V16)Matlab中为什么只能在小数点后显示四位?0 F' {7 L/ g, M4 G: Y
6 m, `! g$ k& G c:#FangQ(Qianqian.Fang@Dartmouth.Edu),2002/6/21,BigGreen/MathTools # ! O, a, }# U2 E4 L1 h# ?) Q9 P% `0 _7 Y
用format命令来改变命令窗口数字的显示格式和精度,但不会影' a- j; Y0 G" k0 W. i$ |
7 J% z7 _ |2 Y1 D
响matlab的计算精度,matlab的矩阵运算默认都是双精度浮点型运算。* A( O3 L( e- q: D' s3 T
+ q* z9 x) l0 n) f6 F
17)Matlab如何在命令窗口按照格式输出?# i# r8 G% P' K$ l
* D6 z- Q/ T0 ]' ?* g:#FangQ(Qianqian.Fang@Dartmouth.Edu),2002/6/21,SMTHTools #1 }# |, U; _* x% ^- y
' p4 ?. v- W. f7 O* h
fprintf(1,"your_format_string",var1,var2,…); $ o# E; a0 v' D, a/ q9 o$ ^1 p4 |4 }; Z6 C. X( R0 H
18)如何在Matlab中画隐函数曲线?: z2 t: R' H. h! _% p
. O r) b1 _ ]
:#FangQ(Qianqian.Fang@Dartmouth.Edu),2002/6/21,BigGreen/MathTools #7 c) ]( |5 a0 U% L. E7 B* ]6 Q
7 d( p* `( D8 _. e
在http://www.mathworks.com/matlabcentral/fileexchange/index.jsp ! N. I. X" Y& p; a 0 Q4 |' A8 t1 O* G1 ?查找implicit,会找到一个Arthur Jutan写的implot.m 2 g8 I0 r& t; O! U) U& S" [1 ]+ S; S% x7 h5 y
Mathematica中绘制隐函数用ImplicitPlot[]% o$ h/ p0 B! _7 e" r3 ^0 q7 _
* ]! J; [3 [# \' j7 U5 A
或者ImplicitPlot3D[] / o2 k* S" L" A$ }0 \: S! c& t ) W5 Y# u2 T( D- y" M8 ?7 O6 H, ]* LMaple中为implicitplot(),implicitplot3d() ! a: y- d7 D' k4 W# V # l; u, V" n# L3 H. c+ R; V参见) Q8 n; F: K+ k9 A
$ V' P1 [* V* Y9 q; {3 j http://engineering.dartmouth.edu ... oad/source/Implicit6 ]4 b+ P3 E2 D7 b ?2 z
, Q/ `: t- x5 J; f( |6 L8 S7 M
Plot3D.htm : H/ p4 e" x; n3 I. B t. r2 I7 N+ G& y$ `$ [5 ^- A
19)Matlab中什么函数可以删除矩阵的某一行或列? - T( Y4 k: U5 J* c6 q4 ]* H, A ' l4 P' j8 q4 }3 b0 ~, Y:#FangQ(Qianqian.Fang@Dartmouth.Edu),2002/6/21,BigGreen/MathTools # / i) n8 B: i% Y& ]$ I; o- u& `7 x g5 m+ A; z5 \" Y# b
A(j,=[]; %删除A的第j行 & n% v) B$ f' D4 O) Y2 S! \5 l0 ?6 J( D6 t' R
A(:,i)=[]; %删除A的第i列4 T {& v& n/ ~% ^7 j, p& u: N
, N6 z+ k% y* X d/ Z
20)Matlab中能开的最大数组是由什么决定的? ' A9 u6 Y7 m+ Q2 n6 B) \ 9 K% s: b; A5 v, m4 O q:# chenft (mike),2002/6/1, SMTH/MathTools #' Y U( @& \ V; y* U8 f+ Y
$ N5 J: E8 r5 i3 O8 I1 _$ a9 \
I have had similar problems. Below is an explanation I received from Ian & g7 d: c0 d, ~" y$ |0 K6 r% K' ?/ b3 y+ O. U
Boyd! O! ?; M, M! o, O( K" V
1 ^7 l* P: L( H) @0 f2 Q7 K9 Jfrom Mathworks (just giving credit where credit is due) that explains6 d; ~# ?5 x$ W2 ~
3 |, i( i& l) F( `: K, C9 i0 B0 `; iwhat's happening. You solution is to run matlab with the -nojvm mode.9 L3 P; e8 ^. n3 m
) C2 u- |& {0 A* m; L) ]" Z"The heap memory system in J***A consists of data and handle elements. ( ~ W& w( S T! c7 L / Y# Y" D6 g( i5 t7 @When you allocate a variable you get a handle and data. As long as data 8 E8 [; S6 a% k' H6 r 6 x! g" t F, t3 V+ d# h' ~( n9 |has an ; r; M. S x/ K) b9 \3 b) ]2 l @+ ^* r$ H9 ~
associated handle, the JVM considers it valid and will not clean it up.5 q4 r' f4 f0 P1 |+ W
$ r* X# z r I! A- g/ e0 @However, when you call the clear function in MATLAB, all handles are8 m' b) J* G$ |7 A% U5 b
/ C7 k" I" K/ ?
destroyed, and the data associated is now invalid. This means that the 4 H) S7 \4 w! c/ C8 z z: p D3 ~- v( u0 @
J***A) j9 G) n& c" ] y" e
2 p- z3 @# c; Q( b+ c3 V. l$ zengine can free up that data (garbage collection), but does not mean ) E& H5 U* H) } h% |9 N3 U$ V% g; J: u: m$ u+ }2 a; n9 q
that it will clean it up at that moment.. l; T6 d0 ^# a1 `, L! [
' c2 x# x: d. o# o
Calling the PACK command encourages J***A to run the garbage collector 4 P) E4 v& S% }/ R6 k ; J3 s; [/ p' nand de-fragment the memory. But it does not force it to (This is part/ a v5 T3 b: j( S: h; p8 W' I; l. m
7 A8 ?) B* W, g9 l$ _5 gof the J***A design). Even though the memory is 'freed' on the heap, , ?- F' }- V O% ]1 P$ g# s0 ~8 j3 r4 ~# y
it is not actually free to the OS, it is only free to the JVM. Here + A5 ?1 }: v9 c- R m2 c: i( d/ L# Y0 C7 Q/ [3 f
is one way to think of it: # X' V9 {/ [" Z0 h8 s/ r# R: P% P% y* T/ K& q
[MATLAB] 5 h2 P5 N: r7 [ ! b2 n1 G9 T. Z[J***A] 2 d8 { r. K, X3 x0 W4 `$ e# g) G6 C3 v- J# p7 {
[OS] 7 [4 J6 M2 ~4 \* \( U7 c( U: Y5 P5 B& \3 Q
MATLAB runs on J***A (virtual machine), and Java runs on the OS (physical , H* P, W' P7 r/ O( a8 t4 ?0 w: W, ^9 B* T
machine). So when MATLAB is running in J***A mode memory allocations / x) _- X) M+ e# Z! V* l$ J& [+ K6 R" T& |1 C0 E. G
are requested from the JRE, not the OS. : @* y0 ^3 L/ R$ a9 o2 O- n: A( @: r5 Q 2 s E$ H% b y! gOne problem you may be running into is that the default maximum J***A heap2 Z9 L! J+ q8 ? q
y$ B/ b( e) r" ~
size is relatively low ( <= 64 M, so that is all the memory one session) g$ ]7 H1 x4 V' k6 G, m/ X
0 y$ {2 d) K8 A0 o, Z7 N
of MATLAB will ever get on your system.9 X) Y, v9 P9 r
# G/ M3 b' ^! {
The good news is that you can increase this value. You will need to create! ]0 b( B: A) y0 r7 ?, f" a1 g
$ |2 W1 n9 B4 z: N( h2 j9 [# Aa java.opts file in $MATLAB/bin/$ARCH (or in the current directory when $ H+ L) V; C- `' p1 R, P6 C: N: A6 r: U
you- n$ L9 P7 S3 k$ ]
2 A3 R5 W% w+ k$ d$ Y" Pstart MATLA and put the following command: : U9 c: ~8 u' B9 @" d1 H9 R% ^ q/ [) {, f* o7 J% I+ a: D' V/ C+ q
%%%BEGIN CODE%%% $ ^! z8 U D7 t6 W1 q 8 L9 T' h; A) Q( M3 I" Y9 Z8 N6 [maxHeapSize = 268435456 4 u4 E. V! ^5 X; l. d ) t7 B5 N* e H1 _( g% T%%%END CODE%%%- L9 x3 l9 W2 d! J% O0 `# t6 _
- u7 I. d8 u: N1 K; R4 ^% O' H9 }/ h* \This will give you 256MB of JVM memory and you can adjust the parameter " u: ^2 }* n* R; H- ? 8 o) ?" G4 z& m: m3 Aas needed. 9 L0 K( W1 i3 {6 ]7 Y6 c F8 r# m! \6 i5 {
Note: $MATLAB is the root directory and $ARCH is your system 7 T; E! T" b$ U# J3 f' c v * q' S L3 M2 L9 A' _/ P. Uarchitecture. This solution works on Windows as well as Solaris, Linux, * g( |% F% ?9 v0 e1 e0 y8 k( F6 t0 I0 s; J3 N( J% O
Alpha, and SGI. A similar operation is possible on IBM and HPUX, but with& u8 X, Q* N1 y+ [& f, |
- y; t9 A0 E" P" j- @a different syntax. ! j, @+ o. Z" V1 b+ [; ]7 U; y8 j. [9 w% B6 b
For the 1.1.8 JVM (Windows, Linux, Solaris, Alpha, SGI) our defaults are: 2 o& V3 k% L- M; i. o6 ^9 P8 O# p$ _ & L7 Y; S7 G% T `minHeapSize = 16000000# z) X& [7 F1 x2 ~: [
- @; m" a6 E' H: X8 ?# M
maxHeapSize = 640000005 c, @1 u* W, W4 D
' q% K) @8 c9 D8 b/ E
These are the structure field names in that correspond to -ms and% {/ n6 U% ~' C! U
- o3 ~! _ B" X* F7 A9 l# ?) }-mx, and the settings above are roughly 16MB and 64MB. 8 Q j2 \" ]& G% Q: }5 \; X ; z/ U+ ?; N4 }, g: c2 }To investigate the Java heap a bit, ask via the following:# M# {7 w8 S% w) }! X
4 P/ }+ z8 z/ t9 W3 ~" v
>> java.lang.Runtime.getRuntime.totalMemory ) ^, B! x9 E% Q( n! [0 K ) b9 n! i& @% L' T3 P$ H>> java.lang.Runtime.getRuntime.freeMemory ( @8 B S0 o- ~% R1 K: D; C! ?$ C; I, H2 C4 b, w+ S
When the free memory hits zero, Java will double the heap size (up to the3 q+ o s, D7 K$ y" y
3 H: q$ J( U2 ]. ymaximum setting). # l* q8 C# |9 i6 }. c& Q1 J+ d$ I3 g$ b! K: {
If you choose to run without Java, you will remove the overhead of the* l B8 Z8 ^4 Q' r, P. [; w
9 F; Y6 ^9 W% O# w$ {& ]
middle man, but you will also lose some MATLAB functionality (mostly . \5 O% k4 b, v4 Y7 K7 y' o( }1 V- D R7 q0 `% ~
graphics and the Editor). You will still have most of the computational & z T% z6 Y& r( w- ^) n, k/ U0 \3 K+ N' l, r5 K& v; f) \# T+ K
power though.) u1 b3 ? G c
- ` l! `6 w$ e7 j x0 r. b( h
Without J***A, memory management will come directly from the OS, and a 4 G* S" a" X# }3 t+ @ E9 _ & o0 _) y2 w9 C& c8 V1 QCLEAR operation will result in memory being freed back to the OS. % H/ ~* E2 f- [2 f$ N5 Q+ K- m% M3 o# y- h) O! D a' k9 w. E
21)如何在Matlab中添加新的工具箱? 1 J8 \8 |. M) t' H9 d4 X) {1 D8 [9 G* h7 v
:#FangQ(Qianqian.Fang@Dartmouth.Edu),2002/6/21,BigGreen/MathTools #* M- \2 s4 h2 j3 @
. s+ a* [: t; K
如果是Matlab安装光盘上的工具箱,重新执行安装程序,选中即可。 ( f1 z \- F4 N n# V x1 j( G: R" d' Y* M& h9 X0 w% t2 ^$ Z
如果是单独下载的工具箱,一般情况下仅需要把新的工具箱解压到某 6 ]! @6 H4 ^, {. z/ G9 U 0 ?7 V! s( w$ V1 |& \7 p t) ]个目录,然后用addpath(对于多个目录的使用genpath())或者pathtool添8 m6 X3 s5 c" W! z! F& Y+ D