24 Mar 2010

matlab三维作图



三维曲线的画法

三维空间曲线要用到plot3函数,这个和plot类似。plot3函数有三个参数,x,y和z轴,比如下面的例子:

>> T = -2:0.01:2;

>> plot3(cos(2*pi*T),sin(2*pi*T),T)

如果安装了Symbolic Math Toolbox的话也可以用下面ezlpot3函数的方法:

>> ezplot3(‘cos(2*pi*T)’,’sin(2*pi*T)’,'T’,[-2 2])

三维曲面的画法

有mesh何surf两种命令来画三维曲面,它们使用的场合不同。前者是当z轴是x和y的显式函数时,后者是x,y,z中某个为其他2个的函数。
mesh函数

>> [X Y]=meshgrid(-2:.1:2, -2:.1:2);

>> Z = X.^2 – Y.^2;

>> mesh(X, Y, Z)

mesh

同理用Symbolic Math Toolbox可以直接执行

>> ezmesh(‘X.^2 – Y.^2′, [-2 2], [-2 2])

surf函数

在函数不能表示成z = f(x, y)时,需要用surf函数。比如x^2+y^2+z^2=1.

先需要用柱面坐标或者球坐标来表示。这里用柱面坐标表示为 r^2+z^2=1

x = sqrt(1-z2)cosθ, x = sqrt(1-z2)sinθ;

执行matlab指令:

>> [theta, Z] = meshgrid((0:0.1:2)*pi, (-1:0.1:1));

>> X =sqrt(1 – Z.^2).*cos(theta);

>> Y =sqrt(1 – Z.^2).*sin(theta);

>> surf(X, Y, Z); axis square

同理用Symbolic Math Toolbox可以直接执行

>> ezsurf(’sqrt(1-s^2)*cos(t)’,’sqrt(1-s^2)*sin(t)’, ’s’, [-1, 1, 0, 2*pi]); axis equal

21 Mar 2010

MATLAB中英文等宽字体显示

MATLAB 中默认的字体是 Monospaced (即等宽字体),这是一种非常适合用于显示程序源代码的字体。但Monospaced 是种逻辑字体,它在不同语言和操作系统上映射为不同的物理字体。

但是编辑器和workspace中文常常出现乱码,原因是等宽字体(Monospaced)没有中文版,不使用等宽字体则必将导致程序语句排版较乱,不适合编写较长的程序(多年来程序编辑器都是等宽字体即可证明等宽字体对于编程的重要性)。经过多年折磨,终于发现了文泉驿正黑体能够完美滴解决这个问题。

这个字体是开源免费的,下载后将ttc后缀名的字体copy到windows的fonts文件夹即可。

下载地址: 点击访问

16 Mar 2010

MSN 9.0 同时登陆多个账号

MSN,现在全名叫Windows Live Messenger,最新版本是9.0了,但一直到这个版本MSN都无法默认实现在同一台机器登录多个实例.

网上有很多方法可以实现MSN多实例登录,大致可以分为两种:一是通过MSN shell,二是通过使用二进制编辑器编辑MSN可执行程序,对我来讲前者只是为了登录多个实例就安装一个SHELL不是很爽,后者通过修改二进制也不怎样.

下面是一个通过增加一个注册表项就可以允许多个MSN实例的方法,本方法在Windows Live Messenger 9.0下测试通过.

运行regedit,在HKEY_LOCAL_MACHINE-> SOFTWARE-> Microsoft-> Windows Live-> Messenger 下增加一个DWORD类型的键,名字是MultipleInstances,值为1.

注册表修改完成后就可以运行多个MSN了。

15 Mar 2010

Print color text in MATLAB workspace



To print color text in MATLAB workspace, Yair Altman has proposed an amazing function cprintf to achieve this goal. The function can be downloaded from MATLAB file exchange.

The result is shown as following:

14 Mar 2010

matlab小波分析



一、小波入门简介

(1)小波分析的起源、发展与应用
http://blog.csdn.net/chenyusiyuan/archive/2007/11/09/1876282.aspx

(2)感受小波
http://blog.csdn.net/chenyusiyuan/archive/2007/11/02/1864195.aspx


二、小波变换与信号分解重构专题

(1)小波变换与信号分解重构
http://blog.csdn.net/chenyusiyuan/archive/2007/11/09/1876329.aspx

(2)自己动手编写小波信号分解与重构的Matlab程序
http://blog.csdn.net/chenyusiyuan/archive/2007/11/13/1881781.aspx

(3)用自编的程序实现小波图像分解与重构
http://blog.csdn.net/chenyusiyuan/archive/2007/11/13/1881940.aspx

三、小波图像融合专题

(1)小波图像融合综述
http://blog.csdn.net/chenyusiyuan/archive/2007/11/14/1883889.aspx

(2)小波图像融合的Matlab实现示例
http://blog.csdn.net/chenyusiyuan/archive/2007/11/16/1888808.aspx

四、小波图像压缩专题

(1)基于小波变换的图像压缩技术初探
http://blog.csdn.net/chenyusiyuan/archive/2007/11/12/1881231.aspx

(2)零树小波图像压缩专题
http://blog.csdn.net/chenyusiyuan/archive/2007/11/15/1886395.aspx

(3)嵌入式小波零树(EZW)算法的过程详解和Matlab代码
http://blog.csdn.net/chenyusiyuan/archive/2007/11/29/1907584.aspx

(4)多级树集合分裂(SPIHT)算法的过程详解与Matlab实现
http://blog.csdn.net/chenyusiyuan/archive/2007/12/07/1923334.aspx

(5)讨论:一种基于状态位图的SPIHT改进算法
http://blog.csdn.net/chenyusiyuan/archive/2007/12/11/1930419.aspx


另外,附件 Wavelet.rar 给出了几个Matlab程序,分别是:

1、基于低频融合策略的小波图像融合程序(Imfus.rar);
2、嵌入式零树小波(EZW)算法的图像压缩编解码程序(EZW.rar);
3、多级树集合分裂(SPIHT)算法的图像压缩编解码程序(SPIHT.rar);
4、一种SPIHT改进算法(Mod-SPIHT.rar)。

其中都包含了基本的小波图像分解与重构程序,使用的是基本的Haar小波,根据Mallat算法编写。

13 Mar 2010

图像边缘检测算子的比较


边缘存在于目标与背景、目标与目标、区域与区域、基元与基元之间,一般是指图像中像素灰度有阶跃变化或屋顶状变化的那些像素的集合,可以粗略地分为两 种: ① 阶跃性 边缘(step edge), 它两边 的像 素的灰度值有显著的不同; ② 屋顶状 边缘(roof edge), 它位 于灰度 值从增 加到减少的变化转折点。对于阶跃性边缘, 二阶方向导数在边缘处呈零交叉; 对于屋顶状边缘, 二阶方向导数在边缘处取极值。


图像的边缘是由灰度不 连续性 所反映 的。经典的 边缘 提取方法是考察图像的每个像素在某个区域内灰度的变化, 利用边缘邻近一阶或二阶方向导数变化规律, 用简单的方法检测边缘, 这种方法称为边缘检测局部算子法。边缘检测的基本思想是通过检测每个像元和其邻域的状态,以决定该像元是否位于一个物体的边界上。如果每一个像元位于一个物体的边界上,则其邻域像元灰度值的变化就比较大。假如可以应用某种算法检测出这种变化并进行量化表示,那么就可以确定物体的边界.

边缘对图像识别和分析十分有用,它能勾画出目标物体轮廓,使观察者一目了然,包含了丰富的信息(如方向、阶跃性质、形状等),是图像识别中抽取的重要属性。随着数学和人工智能的发展,出现了一些新的边缘检测方法,如数学形态法、小波变换法、神经网络法、模糊检测法、IFS边缘检测算子等等。而常用的方法有:基于一阶微分算子的Roberts算子、Sobel算子、Prewitt算子、Canny算子方法和基于二阶微分算子的拉Laplacian算子。下面将简要分析比较一下各种经典算子的优劣:

=============
Roberts边缘算子
=============

Roberts边缘算子是一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘走向垂直。

Roberts边缘算子定位精度高,在水平和垂直方向效果较好,但对噪声敏感。

=============
Sobel边缘算子
=============

Sobel算子是一组方向算子,从不同的方向检测边缘。索贝尔算子不是简单求平均再差分,而是加强了中心像素上下左右四个方向像素的权重,运算结果是一幅边缘图像。

Sobel算子通常对灰度渐变和噪声较多的图像处理得较好。

=============
Prewitt边缘算子
=============

Prewitt边缘算子是一种边缘样板算子,利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘,对噪声具有平滑作用。由于边缘点像素的灰度值与其邻域点像素的灰度值有显著不同,在实际应用中通常采用微分算子和模板匹配方法检测图像的边缘.

Prewitt算子不仅能检测边缘点,而且能抑制噪声的影响,因此对灰度和噪声较多的图像处理得较好。

=============
Laplacian边缘算子
=============

拉普拉斯算子是一个二阶导数算子,而前面提到的三种算子均为一阶导数算子。该算子是一个与方向无关的各向同性(旋转轴对称)边缘检测算子。若只关心边缘点的位置而不顾其周围的实际灰度差时,一般选择该算子进行检测。

由于拉普拉斯算子为二阶差分,其方向信息丢失,常产生双像素,对噪声有双倍加强作用,因此它很少直接用于边缘检测。

鉴于此,Marr和Hildreth将高斯滤波和拉普拉斯边缘检测结合在一起,形成了 LoG(Laplacian of Gaussian)算子,即高斯-拉普拉斯算子,也常称为马尔算子(Marr-Hildreth)。该算子先用高斯算子对图像进行平滑,然后采用拉普拉斯算子根据二阶微分过零点来检测图像边缘.

高斯拉普拉斯算子是两种算子的结合,既具备高斯算子的平滑特点又具备拉普拉斯算子锐化特点。平滑和锐化,积分和微分是一对矛盾的两个侧面,统一在一起后就变成了最佳因子。因为图像中包含噪声,平滑和积分可以滤掉这些噪声,消除噪声后再进行边缘检测(锐化和微分)会得到较好的效果。

=============
Canny边缘算子
=============

坎尼算子是一类最优边缘检测算子,它在许多图像处理领域得到了广泛应用。Canny考核边缘检测算子的指标是:
(1)低误判率,即尽可能地把边缘点误认为是非边缘点;
(2)高定位精度,即准确地把边缘点定位在灰度变化最大的像素上;
(3)抑制虚假边缘.

Canny从这三项指标出发,推导出了最佳边缘检测算子-Canny边缘算子。该算子的基本思想是:先对处理的图像选择一定的Guass滤波器进行平滑滤波,抑制图像噪声;然后采用一种称之为“非极值抑制”(Nonmaxima Suppression)的技术,细化平滑后的图像梯度幅值矩阵,寻找图像中的可能边缘点;最后利用双门限检测通过双阈值递归寻找图像边缘点,实现边缘提取。

Canny方法也使用拉普拉斯算子,该方法与其它边缘检测方法的不同之处在于,它使用2种不同的阈值分别检测强边缘和弱边缘,并且仅当弱边缘与强边缘相连时才将弱边缘包含在输出图像中,因此这种方法较其它方法而言不容易被噪声“填充”,更容易检查出真正的弱边缘。

针对这些边缘检测算子,matlab提供了多个函数实现边缘检测.具体调用方法如下:
BW = edge(I,'sobel')
BW = edge(I,'sobel',thresh)
BW = edge(I,'sobel',thresh,direction)
[BW,thresh] = edge(I,'sobel',...)

BW = edge(I,'prewitt')
BW = edge(I,'prewitt',thresh)
BW = edge(I,'prewitt',thresh,direction)
[BW,thresh] = edge(I,'prewitt',...)

BW = edge(I,'roberts')
BW = edge(I,'roberts',thresh)
[BW,thresh] = edge(I,'roberts',...)

BW = edge(I,'log')
BW = edge(I,'log',thresh)
BW = edge(I,'log',thresh,sigma)
[BW,threshold] = edge(I,'log',...)

BW = edge(I,'zerocross',thresh,h)
[BW,thresh] = edge(I,'zerocross',...)

BW = edge(I,'canny')
BW = edge(I,'canny',thresh)
BW = edge(I,'canny',thresh,sigma)
[BW,threshold] = edge(I,'canny',...)

下面简单对比一下不同算子的特点;
LoG算子:对噪声很敏感,产生原因是采用的二阶求导,所以先用滤波去噪
方法之后,再用该算子提取边缘效果会比较好;
Robert算子:边缘漏检会比较多,原因是采用的一阶求导;
Canny算子:对噪声敏感,边缘提取会较多;
Sobel算子:精度不高需要门限控制对噪声敏感

12 Mar 2010

几个人脸库



人脸数据库汇总

■Annotated Database (Hand, Meat, LV Cardiac, IMM face) (http://www2.imm.dtu.dk/~aam/)
■AR Face Database (http://cobweb.ecn.purdue.edu/~aleix/aleix_face_DB.html)
■BioID Face Database (http://www.bioid.com/downloads/facedb/index.php)
■Caltech Computational Vision Group Archive (Cars, Motorcycles, Airplanes, Faces, Leaves, Background) (http://www.vision.caltech.edu/html-files/archive.html)
■Carnegie Mellon Image Database (motion, stereo, face, car, ...) (http://vasc.ri.cmu.edu/idb/)
■CAS-PEAL Face Database (http://www.jdl.ac.cn/peal/index.html)
■CMU Cohn-Kanade AU-Coded Facial Expression Database (http://www.ri.cmu.edu/projects/project_421.html
■CMU Face Detection Databases (http://www.ri.cmu.edu/projects/project_419.html)
■CMU Face Expression Database (http://amp.ece.cmu.edu/projects/FaceAuthentication/download.htm)
■CMU Face Pose, Illumination, and Expression (PIE) Database (http://www.ri.cmu.edu/projects/project_418.html)
■CMU VASC Image Database (motion, road sequences, stereo, CIL’s stereo data with ground truth, JISCT, face, face expressions, car) (http://www.ius.cs.cmu.edu/idb/)
■Content-based Image Retrieval Database (http://www.cs.washington.edu/research/imagedatabase/groundtruth/)
■Face Video Database of the Max Planck Institute for Biological Cybernetics (http://vdb.kyb.tuebingen.mpg.de/)
■FERET Database (http://www.frvt.org/)
■FERET Color Database (http://www.itl.nist.gov/iad/humanid/colorferet/home.html http://face.nist.gov/colorferet/ )
■Georgia Tech Face Database (http://www.anefian.com/face_reco.htm)
■German Fingerspelling Database (http://www.anefian.com/face_reco.htm )
■Indian Face Database (http:// www.cs.umass.edu/~vidit/IndianFaceDatabase)
■MIT-CBCL Car Database (http://cbcl.mit.edu/software-datasets/CarData.html)
■MIT-CBCL Face Recognition Database (http://cbcl.mit.edu/software-datasets/heisele/facerecognition-database.html)
■MIT-CBCL Face Databases (http://cbcl.mit.edu/software-datasets/FaceData2.html)
■MIT-CBCL Pedestrian Database (http://cbcl.mit.edu/software-datasets/PedestrianData.html)
■MIT-CBCL Street Scenes Database (http://cbcl.mit.edu/software-datasets/streetscenes/)
■NIST/Equinox Visible and Infrared Face Image Database (http://www.equinoxsensors.com/products/HID.html)
■NIST Fingerprint Data at Columbia (Link)
■ORL Database of Faces (http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html)
■Rutgers Skin Texture Database (http://www.caip.rutgers.edu/rutgers_texture/)
■The Japanese Female Facial Expression (JAFFE) Database (http://www.kasrl.org/jaffe.html
■The Ohio State University SAMPL Image Database (3D, still, motion) (http://sampl.ece.ohio-state.edu/database.htm)
■The University of Oulu Physics-Based Face Database (http://www.ee.oulu.fi/research/imag/color/pbfd.html)
■UMIST Face Database (http://images.ee.umist.ac.uk/danny/database.html)
■USF Range Image Data (with ground truth) (http://marathon.csee.usf.edu/range/DataBase.html)
■Usenix Face Database (hundreds of images, several formats) (Link)
■UCI Machine Learning Repository (http://www1.ics.uci.edu/~mlearn/MLSummary.html)
■USC-SIPI Image Database (collection of digitized images) (http://sipi.usc.edu/services/database/Database.html)
■UCD VALID Database (multimodal for still face, audio, and video) (http://ee.ucd.ie/validdb/)
■UCD Color Face Image (UCFI) Database for Face Detection (http://ee.ucd.ie/~prag/)
■UCL M2VTS Multimodal Face Database (http://www.tele.ucl.ac.be/PROJECTS/M2VTS/m2fdb.html)
■Vision Image Archive at UMass (sequences, stereo, medical, indoor, outlook, road, underwater, aerial, satellite, space and more) (http://sipi.usc.edu/database/)
■Where can I find Lenna and other images? (http://www.faqs.org/faqs/compression-faq/part1/section-30.html)
■Yale Face Database (http://cvc.yale.edu/projects/yalefaces/yalefaces.html)
■Yale Face Database B (http://cvc.yale.edu/projects/yalefaces/yalefaces.html)

目前人脸识别领域常用的人脸数据库主要有:
1. FERET人脸数据库[2]
由FERET项目创建, 包含14,051张多姿态,光照的灰度人脸图像,是人脸识别领域应用最广泛
的人脸数据库之一.其中的多数人是西方人,每个人所包含的人脸图像的变化比较单一.
2. MIT人脸数据库[4]
由麻省理工大学媒体实验室创建,包含16位志愿者的2,592张不同姿态,光照和大小的面部图像.
3. Yale人脸数据库[5]
由耶鲁大学计算视觉与控制中心创建,包含15位志愿者的165张图片,包含光照,表情和姿态
的变化.
4. Yale人脸数据库B[6]
包含了10个人的5,850幅多姿态,多光照的图像.其中的姿态和光照变化的图像都是在严格控制
的条件下采集的,主要用于光照和姿态问题的建模与分析.由于采集人数较少,该数据库的进一步应
用受到了比较大的限制.
5. PIE人脸数据库[7]
由美国卡耐基梅隆大学创建,包含68位志愿者的41,368张多姿态,光照和表情的面部图像.其
中的姿态和光照变化图像也是在严格控制的条件下采集的,目前已经逐渐成为人脸识别领域的一个重
要的测试集合.
6. ORL人脸数据库[8]
由剑桥大学AT&T实验室创建,包含40人共400张面部图像,部分志愿者的图像包括了姿态,
表情和面部饰物的变化.该人脸库在人脸识别研究的早期经常被人们采用,但由于变化模式较少,多
数系统的识别率均可以达到90%以上,因此进一步利用的价值已经不大.
7. PF01人脸数据库[9]
由韩国浦项科技大学创建,包含103人的1,751张不同光照,姿态,表情的面部图像,志愿者以
韩国人为主.
8. AR人脸数据库[10]
由西班牙巴塞罗那计算机视觉中心建立,包含116人的3,288幅图像.采集环境中的摄像机参数,
光照环境,摄像机距离等都是严格控制的.
9. BANCA人脸数据库[11]
该数据库是欧洲BANCA计划的一部分,包含了208人, 每人12幅不同时间段的面部图像.
10. KFDB人脸数据库[12]
包含了1,000人,共52,000幅多姿态,多光照,多表情的面部图像,其中姿态和光照变化的图像
是在严格控制的条件下采集的.志愿者以韩国人为主.
11. MPI人脸数据库[13]
该人脸数据库包含了200人的头部3维结构数据和1,400幅多姿态的人脸图像.
12. XM2VTS人脸数据库[14]
包含了295 人在4个不同时间段的图像和语音视频片断.在每个时间段,每人被记录了2个头部
旋转的视频片断和6个语音视频片断.此外,其中的293人的3维模型也可得到.


MIT
ftp://whitechapel.media.mit.edu/pub/images
共有 16 个人的脸,每个人有 27 幅在不同光线、不同尺度、不同头部角度情况下的图像

FERET
http://www.nist.gov/humanid/feret
收集了大量的男性、女性人脸,每张图像包含了一张特定表情的人脸


UMIST
http://images.ee.umist.ac.uk/danny/database.html
分为 20 个主题,共 564 张图像,每个主题包括从侧面到正面的不同人脸姿态

Univ. of Bern
ftp://ianftp.unibe.ch/pub/images/faceimages/
30 个人的 300 张正面人脸(每人 10 张)和 150 张侧面人脸(每人 5 张)

Yale
http://cvc.yale.edu
在不同光照条件下,戴眼镜的表情人脸

AT&T (Olivetti)
http://www.uk.research.att.com
40 个主题,每个主题 10 张图像

Harvard
ftp://ftp.hrl.harvard.edu/pub/faces
在不同光照条件下的剪裁好的人脸图像

M2VTS
http://poseidon.csd.auth.gr/m2vts/index.html
一个包含不同图像序列的多态数据库

Purdue AR
http://rvl1.ecn.purdue.edu/~aleix/aleix_face_db.html
3276 张在不同光照条件下的表情和有遮挡的人脸图像

CAS-PEAL
http://www.jdl.ac.cn/peal/


more details:
http://www.face-rec.org/databases/

11 Mar 2010

vmPlayer+easyvmx玩转虚拟机


================================================
17 Mar, 2010 update
另一个方法,去这里下载一个vbs,然后将iso文件拖到这个vbs上,保存生成的vmx文件,然后用vmplayer打开即可.
================================================

想玩虚拟机,VMware可以用来创建虚拟机,但其太过于庞大,vmplayer可以运行已生成的虚拟机,体积也小了近一半,但是却无法创建虚拟机,只能跑已有的虚拟系统.于是就有了easyvmx这个网站,几个简单的选项,点击生成就能创建好虚拟机文件(一般就几十k),下载后用vmplayer打开,挂载iso,就跟vmware一样了.

其网址为:
http://www.easyvmx.com/

7 Mar 2010

矩阵特征值的意义



http://www.cnblogs.com/Tisty/archive/2008/07/22/1248639.html

特征值就是那个矩阵所对应的一元多次方程组的根
特征值表示一个矩阵的向量被拉伸或压缩的程度,例如特征值为1111111111,则表示经过变换以后,向量没有被拉伸,在物理上表示做刚体运动,相当与整体框架做了变动,但内部结构没有变化.
量子力学中,矩阵代表力学量,矩阵的特征向量代表定态波函数,矩阵的特征植代表力学量的某个可能的观测值。
一个向量(或函数)被矩阵相乘,表示对这个向量做了一个线性变换。如果变换后还是这个向量本身乘以一个常数,这个常数就叫特征值。这是特征值的数学涵义;

至于特征值的物理涵义,根据具体情况有不同的解释。比如动力学中的频率,稳定分析中的极限荷载,甚至应力分析中的主应力.
矩阵的特征值要想说清楚还要从线性变换入手,把一个矩阵当作一个线性变换在某一组基下的矩阵,最简单的线性变换就是数乘变换,求特征值的目的就是看看一个线性变换对一些非零向量的作用是否能够相当于一个数乘变换,特征值就是这个数乘变换的变换比,这样的一些非零向量就是特征向量,其实我们更关心的是特征向量,希望能把原先的线性空间分解成一些和特征向量相关的子空间的直和,这样我们的研究就可以分别限定在这些子空间上来进行,这和物理中在研究运动的时候将运动分解成水平方向和垂直方向的做法是一个道理!

用matlab求矩阵最大特征值的特征向量
用函数[V,D]=eig(A)

矩阵D的对角元存储的是A的所有特征值,
而且是从小到大排列的
矩阵V的每一列存储的是相应的特征向量
所以应该是V的最后一个列
就是最大特征值的特征向量

6 Mar 2010

Google的网址缩短


Google最近发布了自己的短网址服务goo.gl,不过他们还没准备好大规模给消费者使用,所以限制只能通过Google Toolbar分享内容时生成这个短网址,或者是通过FeedBurner像twitter输出feed时使用短网址。

今天,Chrome Extension Gallery里出现了一个叫做“goo.gl shortener”的新扩展,可以帮你直接在不具备Google Toolbar的Chrome里生成goo.gl短网址。

下面介绍几个办法:


1,goo.gl书签(直接把下面的链接拖动到你的书签或收藏夹里,以后直接点击即可将当前阅读页面缩成goo.gl短网址):

goo.gl bookmarklet


2,2个提供类似服务的网站


http://gaigalas.net/lab/googl

如果你看这个网页的源代码,会发现它其实发送了一个POST请求到goo.gl/api这个地址,user agent参数设置成toolbar@google.com,这样就可以获得短网址了。相信马上就会有开发者用这个方法,制作一个书签,这样我们在任何浏览器里都可以直接一键生成goo.gl短网址了,当前前提是Google一直开放这个未公开的API。

另一个在线生成goo.gl短网址的网站:

http://jsbin.com/idalu3

matlab中与字符串有关的函数



matlab中与字符串有关的函数

eval(string)
作为一个MATLAB命令求字符串的值
eval(try,catch)
blanks(n)
返回一个n个零或空格的字符串
deblank
去掉字符串中后拖的空格
feval
求由字符串给定的函数值


findstr
从一个字符串内找出字符串
isletter
字母存在时返回真值
isspace
空格字符存在时返回真值
isstr
输入是一个字符串,返回真值
lasterr
返回上一个所产生MATLAB错误的字符串
strcmp
字符串相同,返回真值
strrep
用一个字符串替换另一个字符串
strtok
在一个字符串里找出第一个标记



       





abs


字符串到ASCII转换




dec2hex


十进制数到十六进制字符串转换




fprintf


把格式化的文本写到文件中或显示屏上




hex2dec


十六进制字符串转换成十进制数




hex2num


十六进制字符串转换成IEEE浮点数




int2str


整数转换成字符串




lower


字符串转换成小写




num2str


数字转换成字符串




setstr


ASCII转换成字符串




sprintf


用格式控制,数字转换成字符串




sscanf


用格式控制,字符串转换成数字




str2mat


字符串转换成一个文本矩阵




str2num


字符串转换成数字





upper


字符串转换成大写






4 Mar 2010

matlab保存图像的几个问题



figure最大化
方法一:
h = figure;
set(gcf,'outerposition',get(0,'screensize'));
方法二(by eight):h = figure;
set(gcf,'units','normalized','position',[0,0,1,1]);


============================
保存图像为png
getframe获得的是一个架构struct类型的数据,

其中cdata子域的内容才可以用imwrite内容保存,用F.cdata表示

getframe(gcf) 即get current figure,获得窗口内图像,包含legend、title以及label。如果不添加gcf,默认为gca(get current axis)。

imwrite 可以保存jpg、png等格式图像,gif是7.0添加的,但是好像没办法保存为动画,只能保存第一帧。

与在图像界面直接利用复制,或用file>save as...保存不同的是,imwrite的背景色为窗口实际颜色,默认为灰色(RGB表示为[.7 .7 .7]),若想保留白色背景图,需添加例子中的set gcf color命令。

=====================================================

保存多个图像时,顺序命名图像文件名称需用到 num2str 或 sprintf命令

num2str(kk) 将数字kk保存为字符

sprintf('格式',kk)将kk保存为需要格式的字符,尤其是图像多于10个名称需要前面补0时很好用

Note:保存多个图像时不要乱动电脑、切换窗口,getframe保存当前图像所在位置的屏幕图像,相当于截屏。如果激活其他窗口,可就没法保证截的啥了。

例:(使用ctrl+t取消注释符后运行)

============================

3 Mar 2010

MATLAB GUI - 对话框设计


对话框设计:在图形用户界面程序设计中,对话框是重要的信息显示和获取输入数据的用户界面对象。

1、公共对话框:

公共对话框是利用windows资源的对话框,包括文件打开、文件保存、颜色设置、字体设置、打印设置等。

1) 文件打开对话框:用于打开文件

<
uigetfile

uigetfile(‘FilterSpec’)

uigetfile(‘FilterSpec’,’DialogTitle’)

uigetfile(‘FilterSpec’,’DialogTitle’,x,y)

[fname,pname]=uigetfile(…)

2) 文件保存对话框:用于保存文件

uiputfile

uiputfile(‘InitFile’)

uiputfile(‘InitFile’,’DialogTitle’)

uiputfile(‘InitFile’,’DialogTitle’,x,y)

[fname,pname]=uiputfile(…)

3) 颜色设置对话框:用于图形对象颜色的交互设置

c=uisetcolor(‘h_or_c,’DialogTitle’)

4) 字体设置对话框:用于字体属性的交互式设置

uisetfont

uisetfont(h)

uisetfont(S)

uisetfont(h,’DialogTitle’)

uisetfont(S,’DialogTitle’)

S=uisetfont(…)

5)打印设置对话框:用于打印页面的交互式设置

dlg=pagesetupdlg(fig)

pagedlg

pagedlg(fig)

6) 打印预览对话框:用于对打印页面进行预览

printpreview

printpreview(f)

7) 打印对话框:

printdlg

printdlg(fig)

printdlg(‘-crossplatform’,fig)

printdlg(-‘setup’,fig)



2、MATLAB专用对话框

1)错误信息对话框:用于提示错误信息

errordlg 打开默认的错误信息对话框

errordlg(‘errorstring’) 打开显示’errorstring’信息的错误信息对话框

errordlg(‘errorstring’,’dlgname’) 打开显示’errorstring’信息的错误信息对话框,对话框的标题由‘dlgname’指定

erordlg(‘errorstring’,’dlgname’,’on’) 打开显示’errorstring’信息的错误信息对话框,对话框的标题由‘dlgname’指定. 如果对话框已存在,’on’参数将对话框显示在最前端。

h=errodlg(…) 返回对话框句柄

例:errordlg('输入错误,请重新输入','错误信息')



2) 帮助对话框:用于帮助提示信息

helpdlg 打开默认的帮助对话框



helpdlg(‘helpstring’) 打开显示’errorstring’信息的帮助对话框,

helpdlg(‘helpstring’,’dlgname’) 打开显示’errorstring’信息的帮助对话框, 对话框的标题由‘dlgname’指定



h=helpdlg(…) 返回对话框句柄

例:helpdlg('矩阵尺寸必须相等','在线帮助')



3) 输入对话框:用于输入信息

answer=inputdlg(prompt) 打开输入对话框,prompt为单元数组,用于定义输入数据窗口的个数和显示提示信息,answer为用于存储输入数据的单元数组。

answer=inputdlg(prompt,title) 与上者相同,title确定对话框的标题。

answer=inputdlg(prompt,title,lineNo) 参数lineNo可以是标量、列矢量或m×2阶矩阵,若为标量,表示每个输入窗口的行数均为lineNo;若为列矢量,则每个输入窗口的行数由列矢量 lineNo的每个元素确定;若为矩阵,每个元素对应一个输入窗口,每行的第一列为输入窗口的行数,第二列为输入窗口的宽度。

answer=inputdlg(prompt,title,lineNo,defAns) 参数defans为一个单元数组,存储每个输入数据的默认值,元素个数必须与prompt 所定义的输入窗口数相同,所有元素必须是字符串。

answer=inputdlg(prompt,title,lineNo,defAns,Sesize) 参数resize决定输入对话框的大小能否被调整,可选值为on或off.

例:prompt={'Input Name','Input Age'};

title='Input Name and Age';

lines=[2 1]';

def={'John Smith','35'};

answer=inputdlg(prompt,title,lines,def);



4) 列表选择对话框:用于在多个选项中选择需要的值

[selection,ok]=listdlg(‘Liststring’,S,…) 输出参数selection为一个矢量,存储所选择的列表项的索引号,

输入参数为可选项’Liststring’(单元数组), ’SelectionMode’(’single’或’multiple’, ’ListSize’([wight,height]), ’Name’ (对话框标题)等



5) 信息提示对话框:用于显示提示信息

msgbox(message) 打开信息提示对话框,显示message信息。

msgbox(message,title) title确定对话框标题。

msgbox(message,title,’icon’) icon用于显示图标,可选图标包括:none(无图标)/error/help/warn/custom(用户定义)

msgbox(message,title,’custom’,icondata,iconcmap) 当使用用户定义图标时,icondata为定义图标的图像数据,iconcmap为图像的色彩图。

msgbox(…,’creatmode’) 选择模式creatmode,选项为:modal, non_modal, 和replace。

h=msgbox(…) 返回对话框句柄

6) 问题提示对话框:用于回答问题的多种选择

button=questdlg(‘qstring’) 打开问题提示对话框,有三个按钮,分别为:yes,no和cancel,’questdlg’确定提示信息。

button=questdlg(‘qstring’,’title’) title确定对话框标题。

button=questdlg(‘qstring’’title’,’default’) 当按回车键时,返回default值default 必须是yes,no或cancel 之一。

button=questdlg(‘qstring’,’title’,’str1’,’str2’,’default’) 打开问题提示对话框,有两个按钮,分别由str1和str2确定,’qstdlg’确定提示信息,default必须是str1或str2之一。

button=questdlg(‘qstring’, ’title’,’str1’,’str2’,’str3’,’default’) 打开问题提示对话框,有三个按钮,分别由str1, str2和str3确定,’qstdlg’确定提示信息,default必须是str1, str2或str3之一。



7) 进程条:以图形方式显示运算或处理的进程

h=waitbar(x,’title’) 显示以title为标题的进程条,x为进程条的比例长度,其值必须在0到1之间,h为返回的进程条对象的句柄。

waitbar(x,’title’,’creatcancelbtn’,’button_callback’) 在进程条上使用creatcancelbtn参数创建一个撤销按钮,在进程中按下撤销按钮将调用button_callback函数。

waitbar(…,property_name,property_value,…) 选择其它由prompt_name定义的参数,参数值由prompt_value指定。

例:

h=waitbar(0,'pleas wait...');

for i=1:10000

waitbar(i/10000,h)

end

close(h)