Wednesday, November 11, 2009

matlab程序如何生成可执行文件

matlab程序如何生成可执行文件

要将用Matlab语言编写的函数文件编译成可独立执行的*.exe文件(即可脱离Matalab环境的执行程序),首先要安装和配置好Matlab Compiler,一般来说,在安装Matlab时就已经安装了相应版本的Matlab Compiler。只是不同版本的Matlab,其编译器的使用方法有一定的差异,这一点要引起一定的注意。

在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:

Mbuild –setup

然后根据提示执行相应的操作,使用者可根据自己计算机中现有编译器的情况选择合适的编译器,如VC++ 6.0VC++7.0Bland C的编译器等,目前Matlab好象还不支持VC++8.0(我计算机安装的就是VC++2005Matlab就无法识别)。当然,如果你的计算机里根本就没有安装其他任何语言的编译器,也可选择Matlab自带的Lcc编译器,其实这个编译器对大多数用户已经够用了(我就是选择的Matlab自带的Lcc编译器)

配置好编译器后,自然就是对自己编写的M文件进行编译了。

M文件编译为独立可执行文件的语法是:

>>mcc –m fun1.m fun2.m…..

其中fun1就是最后的可执行文件的名称。

另外,也可通过采用命令开关-o指定编译最终目标文件的名称,如 mcc –m main.m –o mrank_main,就是将编译后的文件指定为mrank_main.exe

编译后的生成文件根据编译器的版本不同而不同。具体的可参阅相关资料。

如果要在没有安装matlab的计算机上执行编译后的程序,首先要将\MATLAB701\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上(7.0以前的版本是mglinstaller.exe)

其次是要将“MCRinstaller.exe安装目录\runtime\win32这个路径添加到该计算机的环境变量中,添加的方法是:

右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。

第三步是将编译生成的相相关文件拷贝到同一目录下(当然其他目录亦可)。

第四步是打开MS-dos操作窗口,进入到编译后的*.exe程序所在的目录,执行编译生成的*.exe文件即可。

需要说明的一个问题:

如果你的程序还附带有图片(如Version上的图标)、Web页面(如help 文档),在编译的时候可能无法与M文件一起编译(因为我没有试过,也没有看到有关这方面的介绍),这没有关系,先在计算机上执行一次你编译后生成的独立可 执行文件,这时在同一目录下会生成一个以你编译后的程序名+_mcr结尾的文件夹,这时,你只需要把与程序相关的图标和Web页面拷贝到该文件夹中的 Matlabprogram下面的一个子目录(一般与用于编译的文件夹名相同)中即可。

其他的方法还有:(以下是网上搜索到的方法,没有试验过,有兴趣的朋友可以试一试)

方法一:在matlab下的workspace里打comtool,点file-open project将我们先前建好的comtest.cbl工程文件打开,再点component--package component就实现了打包,此时到comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的_install.bat就可以实现安装

方法二:如何将gui生成exe

已有gui.m文件和gui.fig文件

1 matlabcommand窗口中输入

mcc -B sgl GUI.m

2.将上步生成的文件包括*.m 文件和*.fig文件一起考到待运行的机器

此时仍需matlab所必需的动态连接库。

3. /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上

4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bintoolbox两子目录,其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。

5.大功告成。

方法三:运行mcc -B sgl GUI.m 生成exe文件,把GUI.exe文件和GUI.ctf文件拷贝到目标电脑上,然后在目标电脑上安装 MCRInstaller.exe ,安装完以后,我点击GUI.exe,它显示:this application has requested the Runtime to terminate it in an unusual way。这个可能是哪里出错了呢?

Solution:

The segmentation violation can be caused due to a corruption in either the profile of the current user or by corrupted Windows libraries. In order to determine which is the cause, try logging in as a different username and run MATLAB.

If you are able to successfully launch MATLAB under a different username:

1. Log onto the machine, as the user that is receiving the error.

2. On your desktop, click on Start > Run

3. Type "regedit" in the Open text field and click OK, this will bring up the Registry Editor

4. In the Registry Editor expand the following folders: HKEY_CURRENT_USER > Software > MathWorks > Matlab

5. Under the MATLAB key, find the folder having the same name as the version number of the MATLAB that is crashing; and delete it. This Registry key will be regenerated the next time MATLAB is started.

Click on the link below to view an image of the Registry Editor, which shows how to delete a registry key for MATLAB 6.5 (R13).

After following these steps, you should be able to launch MATLAB successfully.

If MATLAB crashes regardless of the user who is logged in, the crash may be caused by corrupted system libraries. For Windows NT, 2000, or XP, some customers have found that reinstalling Windows Service Packs have resolved the issue

这个是启动6.5时出类似错误的解决方法,你试试7.0可否成功吧

Monday, October 12, 2009

Juggling strategy in Tower Defense game

The enemies move along the shortest path from source to dest.

We could model this problem as a graph shortest path!

Juggling is actually making 2 different paths, and maximize the enemies' staying in the maze we built!

hmm... timing for adding/removing a tower is critical though!

CVPR2009 BEST PAPER WINNER'S STORY

(COPY FROM INTERNET...)
由简至美的最佳论文
(2009-08-12 22:15:20)
标签:微软亚洲研究院 图像去雾 cvpr 最佳论文 研究心得 论文背后故事
分类:技术
作者:何恺明

那 是2009年4月24日的早上,我收到了一封不同寻常的email。发信人是CVPR 2009的主席们,他们说我的文章获得了CVPR 2009的最佳论文奖(Best Paper Award)。我反复阅读这封邮件以确认我没有理解错误。这真是一件令人难以置信的事情。

CVPR 的中文名是计算机视觉与模式识别会议,是计算机视觉领域最顶尖的国际会议之一。今年的CVPR共收到约1450篇投稿,其中393篇文章被接收,接收率为 26%。只有一篇文章被选为今年的最佳论文。这是CVPR创立25年以来首次由中国人获得这个奖项。这篇文章是我在微软亚洲研究院形象计算组实习的时候完 成的,也是我个人真正意义上写的第一篇论文。

简单有效的图像去雾技术

这篇论文研究的问题是图像的去雾技术,它可以还原图 像的颜色和能见度,同时也能利用雾的浓度来估计物体的距离,这些在计算机视觉上都有重要应用(例如三维重建,物体识别)。但是之前人们还没找到简单有效的 方法来达到这个目的。在这篇论文里,我们找到了一个非常简单的,甚至说令人惊讶统计规律,并提出了有效的去雾方法。

与之前的方法不同,我 们把注意力放到了无雾图像的统计特征上。我们发现,在无雾图像中,每一个局部区域都很有可能会有阴影,或者是纯颜色的东西,又或者是黑色的东西。因此,每 一个局部区域都很有可能有至少一个颜色通道会有很低的值。我们把这个统计规律叫做Dark Channel Prior。直观来说,Dark Channel Prior认为每一个局部区域都总有一些很暗的东西。这个规律很简单,但在我们研究的去雾问题上却是本质的基本规律。

由 于雾总是灰白色的,因此一旦图像受到雾的影响,那么这些本来应该很暗的东西就会变得灰白。不仅如此,根据物理上雾的形成公式,我们还能根据这些东西的灰白 程度来判断雾的浓度。因此,我们提出的Dark Channel Prior能很有效地去除雾的影响,同时利用物的浓度来估算物体的距离。

电脑游戏带来的灵感

这个想法的产生来自于两个偶然的观察。

第 一个观察来自一个3D游戏。这个游戏有很多带有雾的场景,但这些场景都是虚构的不实在的东西。计算机生成的3D图像会与自然图像的统计规律有很大区别,但 人的视觉系统却仍然能感觉到虚拟图像中存在的雾。这让我相信,人的视觉系统一定有一种有效的机制来感知有雾的图像,而且这种机制一定与现存的去雾方法不一 样。前人提出的去雾方法都把重点放在图像的对比度上,但虚拟场景和现实场景在对比度上的统计规律会很不一样。人的视觉系统仍然能够感知虚拟场景中的雾,说 明除了对比度以外,人眼一定还在利用别的东西来感知雾。所以我觉得,这个问题里一定有人们未曾发现的更接近本质的东西。

第二个观察来自对 前人的去雾方法的研究。之前最有效的去雾方法是Fattal在2008年的Siggraph文章《Single Image Dehazing》中提出来的,这篇文章是我们首要超越的目标。这篇文章里给出的比较结果中,我发现一种叫做Dark Object Subtraction的方法有时候会有更好的效果。这种方法利用了全图最暗的点来去除全局均匀的雾。如果雾的确是均匀的,这种方法就会更有效。其缺点在 于它无法处理不均匀的雾,而这却正是去雾问题中的难点。因此自然的想法就是局部利用Dark Object Subtraction处理图像。而恰巧这样做并不需要利用对比度,说明它与之前的方法有了本质的区别。让人吃惊的是,在大量的实验中,我发现这么简单的 想法,其效果却非常好。

但我们论文中最重要的观点却形成在我动笔写文章之后。在文章的前几稿中,我在形象计算组的mentor孙剑一 直追问我,我们的方法能成功的本质原因是什么,背后有什么我们没有充分理解透彻的“真知灼见”。尽管我们有很简单的方法,也有很漂亮的实验结果,但我们却 无法让人对这种方法的有效性感到信服。这是因为我们还讲不出个道理来。带着这个问题,我又回到了实验和观察之中。我发现,既然大量实验结果证实局部做 Dark Object Subtraction的做法是成功的,那么就说明去雾之后的图像的每个局部的确是有暗的物体存在的。也就是说,在这个方法成功的背后,其实有一个关于无 雾图像的统计规律。我的mentor孙剑让我去先去研究一个无雾图像的数据库。通过大量的实验,我们发现这个统计规律是客观存在的。这就是我们所提出的 Dark Channel Prior。

这是我写的第一篇论文

2007年,我从清华大学基础科学班本科毕业,之后就读于 香港中文大学。在基础科学班的主修课程是数学和物理,因此在本科阶段,我并没有系统地学习过计算机方面的相关知识。出于兴趣,我选修了计算机图形和图像方 面的一些相关课程。但是在进入微软亚洲研究院实习的初期,这些基础课程远远不足以应付我面对的研究工作。背景知识的缺乏使我在入门的路上举步维艰。在阅读 文章的时候,我常常都不知道哪些是大家都在用的方法,哪些才是作者的贡献。对我来说,我看见的每一样东西都是新的。

在面试的时候,我的导 师汤晓鸥就跟我说过,他并不在意我没有相关的背景知识,因为所有相关的东西都是可以学的。在进入微软亚洲研究院实习的头一年里,我在mentor孙剑的指 导下做过几个不同的课题,虽然都没有成功,但从中学习了不少知识。其中我花了大量时间研究的image matting问题 (半透明物体边界提取),就对这次的文章有很大帮助。在刚开始研究去雾的时候,我就发现雾的方程和matting的方程非常相似,而我之前所研究的 matting框架可以给去雾带来帮助。利用这个框架,我只需要寻找一个能局部估算雾的浓度的方法就行了。这个框架使得我能专心的寻找这样的方法并且最后 提出了Dark Channel Prior。

即使有了想法和实验结果,第一次写文章也使我觉得非常困难。我经常陷入自己和自己吵架 的角色当中。在每一段话写好之后,我常常会质问自己事情到底是不是这样的,这其中有没有漏洞。我也会问自己,如果我是评委,或者是读者,那么我能看懂这篇 文章吗,我怎么写才能让思路更加流畅。就在这样的挣扎中,一稿通常要写好几天。而即使是这样,起初的几稿也远没能让孙剑满意。一开始,他只在文章的结构、 思路和观点的提出上给我建议,而不去具体修改我的文章。于是我又回去继续和自己吵架。但每当我把自己说服了,孙剑还是总能提出新的质疑。就在这样的循环 中,终于有一天孙剑说文章已经写得不错了,他才开始具体的修改。正是这样的苛刻要求,才会有后来高质量的文章。

大道之行在于简

我 们这篇文章的三个审稿人都给出了最高的评分。他们认为我们的方法简单而有效。其中一位评委说,Dark Channel Prior的想法听起来很不可思议,但我们却证明了其真实性。另一位评委认为很少有文章能够用如此简单的方法使实验结果获得如此大的提升。还有一位评委甚 至亲自实现了我们的方法并确认其可行。孙剑说阅读这样的评审结果是一件让人快乐的事情。而汤老师认为,这篇文章的成功在于三个方面。第一,方法非常简单; 第二,对于一个很困难的问题,给出了很好的结果;第三,发现了一个基本的自然规律并且应用在实际的问题中。在迈阿密的演讲结束后,观众也给予了很高的评 价。他们跟我说,这是这次CVPR上最有趣的一个演讲。

一位与会的研究员说,最好的idea,往往就是那些看起来很简单,但说出来大家都 会觉得怎么没有人想到过的idea。而我们的idea正好就符合了这一点。我们论文摘要的第一句话是这么说的,“我们提出了一个简单而有效的方法”。或 许,这就是对我们这次工作最好的概括——简单的,就是美的。

作者介绍

何恺明:微软亚洲研究院视觉计算组实习生,现就读于香港中文大学讯息工程多媒体实验室,本科毕业于清华大学基础科学班。他是2006年微软小学者奖获得者,2003年广东省高考状元。

Sunday, April 12, 2009

Multi touch tech, changing our UI !

Keyboard+mouse has been going along with PC several decades. Now the change seems to come.

Just impressed by M$ Surface tech demo. It's awesome!!!

What amaze me most is the multi touch tech, which uses infrared cam to capture multi finger tips, and tracking.

Definitely it's an awesome UI that human would like to work on!

Now it's about 5k - 10k, but not yet available for home users, (maybe still debugging??? :P )

Friday, March 27, 2009

Bound on AI

Currently the intelligence of a computer algorithm can be is constructed on a 60+ yr old architecture, John von Neumann Architecture, and Turing machine model.

Human has incredibly creativeness, which is unbeatable by the current computer architecture, since it's built on the Turing machine model.

What's creativeness? It's something always can create new ideas and new thoughts, which is totally unexpected. Like, you can brainstorm with your professors when discussing a new research problem, and it's likely to lead to something undiscovered. Like, when you happen to play a new puzzle game, you can always figure out some new strategies. These skills are unpredictable.

However, that's exactly what the computer cannot. Turing machine defines a machine is always "predictable" !

Recently a professor from CMU coined a name : human computing, which first clarify the boundary between human and machine, by finding out some tasks like CAPTCHA that only human can figure out.

The ultimate goal of AI is to make the machine achieve to human intelligence. Therefore the underlying architecture has to be modified to adapt to creativeness.


New Blog, New Start

Just get to know that Blogger belongs to Google, the top $$ search engine. Therefore, it's wise to set up a new blog here and start blogging. :)