2009年4月14日
There are two major styles for Chinese paintings:
Gong Bi(detailed):
Xie Yi(Just catch the meaning):
Now i am just concerned with the Style of Chinese Ink Painting. So the second one looks pretty great for guiding me in my research.
2008年11月25日
首先需要说明的是,我是一个在职的学生,今年博士生二年级,所以我也需要 不断的学习,因此我希望今天的讲座是我和同学们之间的一个交流。
我先讲一下我的背景,这样可以解释我为什么会有这样的体会。首先讲一下我 个人的背景。我概括了一下,大致可以分为三个阶段。一个是在我读硕士的时候。我搞的是天气模式识别。这个是模式识别的一部分,在90年代初的时候很热的一个方向。当时我也学到了许多相关的东西,比如说神经网络。后来参加工作,我做了大约5年的开发。在这5年里面,我根本不认为我是在做研究,但是它使我打下了坚实的基础,特别是技能方面的基础,比如说编程动手方面。这还是让我觉得受益匪浅的。2000年的时候我开始转到研究这方面来,主要是阳老师带着。这个时候我作研究没有什么经验,处于一种摸索的阶段。当时我印象最深的是阳老师向我推荐了几本很经典的网络方面的书。因为那时我们不能有效的找到一些文献资料,很长的时间里面处于一种摸索阶段。后来慢慢的有了一些论文,就对做研究有了一些感觉。到了今年的上半年,因为有了一定的基础,可以学习一些研究的经验,慢慢的就把事业扩展开去了。其中对我影响比较深的是我和微软研究院一些人的接触。今年四月份的时候,我和微软研究院开始有一些交流活动,后来参加了一个国家科学部举办的一个培训。在这半年的时间,我学到了很多东西,处于一种学习阶段。我一直比较关注如何的更有效的开展研究工作,因为这是一个具有普遍性的问题。这就是我这两年的背景,下面我要讲到的许多东西都和我这些背景有关。
还有一个背景就是学科背景。并不是每一个学科它搞研究的方法都是差不多的,特别是对我们计算机学科来讲,它还有许多的特点。我们这个学科不仅是研究,更注重应用技术,尤其我们研究所的方向就是应用方面的。对于这个方面来说,有这样几个特点:发展快,研究成果转化快。这个特点是我们计算机学科所不同于其他学科的。我曾经和微软研究院的一个副院长交流的时候,他的一个观点很独特。他说,现在sci是国内评价一个人或一门学科最硬的指标,但是它对于我们这种学科是不适用的。为什么呢?因为我们这个学科发表东西特别快,比如说网络方面或者多媒体方面的,它可能有一个年会,而sci在年会之后的三年才进行收录。而三年过后,那个年会的创作高峰期已经过了。所以说计算机学科最有价值的东西往往不在sci里面。对于一些传统学科比如说物理或者化学,sci的评价更具参考价值。还有一个特点就是说计算机这个领域比较开放。所有信息可以通过各种途径找到,包括别人所作的研究成果,只要你用心去找,一定能找得到。这样就造成了大家的竞争,就说你很难超越别人。大家都在做,都做的很好,这就要求你的起点非常高。如果一个人单独做,那基本上是没戏的。就像刚才周老师介绍的许多文献,那都是人家几年的工作。你再看别人文献的时候,要注意到那时人家两三年前的工作,所以这个起点你一定要清楚。我们这个学科还有特点就是应用性强,工程性强。这个也是没有办法的,这样的话我们这个学科可能是应用方面比较强,后天理论方面可能不足,这也是每一个科研单位面临的问题。所以对我们来讲,需要相对的补充一些理论方面的知识。
下面我本来准备讲一下查资料的方法。开始准备的时候没有想到周老师会讲的这么好,我也就不再多讲了。我们做工作一定要有个好的起点,这个起点就是前人做的工作。站在前人的肩膀上,不见得是巨人,但你不能从头做起。
还有一个就是你扩大自己的知识面。现在的自然学科对话要求有开阔的知识面,这个也是难以平衡的,一个是深度,一个是广度。特别是在我们读书的阶段,一定要培养自己的知识面,因为以后参加工作以后,就可能没有那么多的精力和机会去开阔了。在读书的时候,和同学的交流,参加一些活动,阅读一些文献资料,这些都是开阔知识面的好机会。我觉得阅读好的论文和书籍是一个有效的方法。因为那些是人家做的一些很好的工作,对你来说是可以拿来直接用的,是很有效的一个捷径。还有就是如果你有机会接触到一些大师的话,要好好把握。大师往往能在一些地方给你重要的启发。我是很盼望能够经常见到一些大师,这样对我的帮助肯定特别大,因为他们身上有很多很多东西值得我学习,对于我们每个人都是这样。北大学生往往对于来北大的一些人不重视,他来他的,我做我的。其实很有可能他会改变你的人生,所以这种机会一定要好好把握。
还有就是培养自己看事物的深度。你们在座的研究生处于最能够到达事物深度的年龄段,对事物的认识一定要把握好,要勤于思考,联系事物。我举个例子来说。前几年我一直在做软件开发,我一直在想,面向对象的本质是什么,为什么这10年来OO的影响这么大,而且它的影响长盛不衰。你找一本教科书,它会告诉你面向对象的特性,但你要想一下,这样的说法有没有说服力。我在研究生期间读过有关分数维的书,我们现在看世界一维的一条线,二维的一个平面,三维一个立体,但是有些维数它是一个分数,比如说1.4维,它也能够来描述一些很有意思的现象,比如说好多分形图的维数就是分数维。这个可能和OO还没有联系。在分数维里面有很多特性,比如说自相似性,这在数学里面有几套等价的理论。比如说信息论,我们可以用信息量来衡量一个事物的复杂性,用信息里面的熵衡量,这个是整个IT比较奠基的东西。后来5月份的时候我给研究生上课,讲到composite的时候它就是用对象来描述事物,他有一定的自相似性,因为它在节点上又包含了抽象类父类的信息。那天我突然想到这个和OO其实有很多东西是相关的,因为OO的本质是描述事物之间的关系的,就是说好多对象可以用对象来说,其实他们之间有一定的相似性。像composite这种模式具有相当的普遍性,就是说它反应了现实生活中的好多模型。为什么OO现在能这么样的反应现实生活中的特征,这两者之间是相关的。也许我说的不是很精确。但是我后来确实把两件事情联系起来,那是我正在课堂上讲授composite模式的时候突然想到的。我说这个事情并不是吹捧我自己,我是说当你经常的深层次的思考一些问题的话,会有一些意外的收获。不要总是停留在表面上,因为我们将来要进行研究工作,如果你做的研究比较深的话,经过思考之后你会有一些发现,这些发现对你将来的工作会有很大的帮助。
还有研究工作的一个起点就是对领域的认知。我们每一个人在应用领域里面不见得完全相同,但作为研究起点起码对领域应该有几点认知。一个是从理解中的认知,它的一些应用基础,它解决了一些什么样的问题,这个是需要认知的。还有一个就是国内外的形式,比如说在学术研究领域里面有那些很好的年会,有那些杂志。这些知识绝对是有帮助的。
研究工作结束后,既应该写成论文发表,也应该参加会议做报告。目的都是为了学术交流,扩大影响,听取意见。以利下一步工作。
做学术报告容易犯的毛病是简单地将论文原封不动地在会上读一下,这样的效果是肯定不会好的。所以首先应该将写学术论文和做学术报告的区别弄清楚。学术论文是用文字表达的,学术报告是用语言表达的。这两种表达方式的根本区别就决定了写论文和做报告的不同。看论文的人是主动要看的,听报告的人却不全是主动要听的,所以能否吸引听众,让他们听你讲,是报告者首先遇到的挑战。看论文是不受时间限制的,可以颠来倒去反复看,不怕一时看不明白;听报告是有时间限制的,听不明白的问题没有机会立即解决。所以报告者应该力求简明扼要,切忌眉毛胡子一把抓,鸡毛蒜皮都要讲。结果听众不胜其烦,什么也没有听明白。看论文时作者并不露面,作者的形象、风度等不会影响读者的阅读兴趣;听报告时作者则不然,如果报告者一上台,心虚胆怯,搔头模耳,手足无措,听众一看,这人不怎么样,顿时就没有了听下去的兴趣。个人条件的差别是客观存在的。只有时刻牢记这些差别,才能按语言表达的特点,做好报告。
明白了以上差别,就可以知道报告内容虽然是论文的内容,但报告的方式并不是论文的方式。报告时不必从引言到结论依次全面叙述,主要应该明确研究主旨,展示思维逻辑,逐步展开层次,突出创新结果,讲清基本观点。一次报告下来,听众能知道你获得了什么新结果,提出了什么新观点,就算是成功的了。因此,报告开头要讲清研究的背景、基础和目的。叙述时简明扼要,定位准确。实验方法不必细讲,甚至可以不讲。实验结果与讨论可以结合讲,夹叙夹论,前因后果,衔接清楚,引人人胜。与写论文不同,做报告时,能用图的尽量用图,少用表,因为图案的形象比表中的数字更直观。幻灯屏幕上应避免大段文字,只用提纲和图表即可。字数横向20字以内,竖向9行以内。画面设计要简洁醒目,不要花里胡哨。做报告时常用激光打点指导视线,因此光点应与讲话的内容高度一致。切忌将光点漫无目的地胡乱晃动,使听众眼花缭乱。为了使光点指示清楚,拿激光笔的手可以借助案桌或自己身体作依托,以免抖动。这些看似细节的技巧,却常常影响着效果,同样是不可忽视的。
报告完后要准备回答听众的问题,不要如释重负,急于下台。回答问题往往比做报告还难。因为做报告是可以事前准备的,回答问题常要随机应变,临场发挥。作者的水平往往在回答问题时反映得更清楚,是不可以掉以轻心的。回答问题时应该实事求是,充满信心,不卑不亢,彼此尊重。不论是具体技术问题、不明情况的问题、完全错误的问题,还是确有高见的问题都应该据实以答。成功的回答一般都表现为能听准问题,迅速调动头脑中的信息储备,言简意赅地一语中的。切忌没有听清问题就文不对题地瞎答一气;切忌漫无目标地东拉西扯;切忌曲意迎合或顶牛抬扛。学术讨论应该是理性的、自由的、坦诚的、相互尊重的。问题回答得好,常能在报告的基础上进一步发挥,相得益彰。回答得不好,会使原有报告的效果大打折扣。而回答问题的能力是要知识、应答、口才多方面长期训练才能提高的。
为要做好学术报告和答辩,平时加强口才训练十分重要。现代人才学认为:“是人才未必有口才,但有口才必定是人才。”因为只有充分掌握知识并能运用自如,而且能了解对象的水平、需要、兴趣、认识过程,能用语言沟通自己的知识和听众的需要的人方能算有口才。口才不是夸夸其谈,是真才实学的适度表达。因此自古以来都把“才思敏捷,对答如流”作为高层次人才评价的主要标准,这是有道理的。
2008年8月31日
虽然从2003年开始接触程序设计与开发,但是自我感觉对C/C++的了解始终停留在表面层次,未能深入了解先人创立这门应用广泛语言的内在深刻的哲学和精巧。因此一直想读一本能够真正诠释C++内涵并且深入浅出的好书。曾经留意过《深入浅出MFC》但毕竟这是介绍MFC而非C++的经典著作,因而未能了却一直以来的心愿。如今拿到这本《C++ Primer》,好评如潮,禁不起冲动要仔细研习一番,因此创立此Blog系列。但自知鄙人C++水平有限,如若文中出现各种错误的理解,望各位朋友能够给予批评指正,在此鄙人不胜感激。
下面就开始进入学习笔记的第一章,开始。
预处理器指示符:两个比较有用的预定义名字:_LINE_ 和 _FILE_,分别记录已被编译的行数和正在被编译的文件名。
if ( element_count == 0 )
cerr << "Error: " << __FILE__ << " : line " << __LINE__ << "element_count must be non-zero.\n";
另外两个预定义名字 _TIME_ 和 _DATE_,格式分别为 hh:mm:ss 和 Oct 31 1996
assert()是C语言标准库中一个通用预处理宏,常用来判断一个必须的前提条件,以使程序能够正确执行。
#include <assert.h>
assert(filename != 0) ;
如果条件为假,断言失败,程序将输出诊断消息,然后终止。
C++中使用格式是
#include <cassert>
using namespace std;
2008年7月17日
看了《功夫熊猫》才意识到这一点~
整个影片除了融合中国元素与美式幽默以外,更多的是体现一种出世入世的心怀,而这一种恰恰也是融合了中国特有的传统思想与西方价值观。例如那卷秘籍的龙之轴,如果说算是老乌龟耍的一点计量,倒不如说是体现了中国武术精神的一种最高境界,在这一点上,好莱坞导演们可以将中国思想表达的自然而流畅,心中不免崇拜之至;试想在这一点上中国多少年来的电影体现的不都是这样一种思想吗?张三丰,英雄,所谓心中无剑却有剑,我想这是一个道理的。但是反过来想想中国导演什么时候能导一个融合西方价值观却又不乏哲理的优秀的幽默喜剧电影或动画呢?我想至少要走的路还长着呢~
而题目中的那句话,我是对我自己而言感触最深。熊猫在什么情况下,听到老乌龟对他说的这句话呢?熊猫的心情的确有些迷茫和复杂,不相信自己,却又不甘平庸;继续前行还是放弃,听吧,这说的像极了我们。读了N年书,期盼着拥有着璀璨闪着耀眼光芒的明天,却仍然在现实痛苦的忍受涅槃,说是涅槃也就好了,至少这样我们是对自己有信心的,怕就怕不知道几年以后,学生时代终结,自己又是何去何从,未来的路的确渺茫,有时候人要有远见,要看清灯塔,但是如何抵达,却往往被我们自己忽略。于是乎每日浑浑噩噩,神不守舍,漫不经心,白天精神恍惚,看似无忧无虑,晚上自我懊悔,心想明天可不能这样了;然后翌日照旧如此,如此这般,三年五载,一晃而过。这样情况的存在,就是因为忽略了现今的存在,也就是开篇第一句话,我想这句话我是要认真想一想,也送给所有有着相同处境的朋友。
至于“照搬地”什么的抵制活动,有些不可理解,可以去看看视频,说是喜欢这部电影的国人都是犯贱。呵呵,这么说在他的定义下,我着实犯贱了一把。不过理由又是什么呢?我看了一下,无非是国外看这部电影,是在看中国笑话的心态下观看,要不就是熊猫的父亲是一只鸭子,再有就是师傅是北美浣熊?诸如此类。如果以这种理由来抵制,我想中国电影艺术真是自欺欺人到家了。难不成因为一只喜剧熊猫,外国人就把所有中国人都看成笑话?那我们又是怎样从金凯瑞的电影来看待美国人,至少我可没有觉得所有美国人都是这般,无非搞笑而已。至于师傅是谁,爸爸是什么动物,这又能反映什么问题呢?动画而已,非要从这里挖出来点原因,感觉无非是鸡蛋里挑刺。
况且这部动画电影看过之后,除了发笑之余,细细回想,每个人还是会有所思有所想,我想艺术的最高境界无非如此,就是能够给人有所思考的空间。看过之后没有激进的思维,只有平和、和谐的心态[原谅我套用这么热门的词汇]。相反之下昨天看了国产的 风云决,同样是功夫动画大片,却是极尽打杀之能事,不能说这种片子不好,有很多人喜欢这种风格,但我想不适合青少年去看,青少年还是看些平和的好,毕竟年少轻狂年代,就别火上浇油了~
2008年5月25日
Problem Solving
1、一个半径为2的圆,最少需要用几个半径为1的圆可以完全覆盖?
2、有145块糖,甲乙两个人,规定每人只可以一次取1,3,4块,取走最后一块糖的为赢家。如果甲先取,谁会赢,他的策略是什么?
2008年5月22日
1double squared_distance(double* source, double* target, int d)
2{
3 double res = 0;
4 for (int i=0;i<d;i++)
5 {
6 res += pow(source[i]-target[i],2);
7 }
8 return sqrt(res);
9}
10
11int knnLabel(double **p, int n, int d, int *c, double *x, int k, double t = 0)
12{
13 assert(k > 0 && k <= n && d > 0 && p && c && x);
14
15 if (t > 0) {
16 t *= t; // because we use squared distance
17 }
18
19 // a list of {index => distance} pairs
20 std::list<std::pair<int, double> > nabors;
21 std::list<std::pair<int, double> >::iterator i;
22 for (int j = 0; j < n; j++) {
23 double dist = squared_distance(p[j], x, d);
24 if (dist <= t) { // a neighbour within acceptable distance found
25 return c[j]; // done, immediately report this neighbour's category
26 }
27
28 //====
29 // check if p[j] is closer to the target than any recorded neighbours,
30 // and if positive then sort its index/distance profile into the list.
31
32 // searching the list for the first one with a longer distance
33 for (i = nabors.begin(); i != nabors.end() && dist >= i->second; i++);
34
35 if (i != nabors.end() || nabors.size() < k) { // p[j] qualified
36 nabors.insert(i, 1, std::pair<int, double>(j, dist));
37 if (nabors.size() > k) { // list overfilled (has k+1 profiles)
38 nabors.pop_back(); // bumping out the farthest neighbour
39 }
40 }
41 }
42 //====
43 // each of the k nearest neighbours cast a vote, and the majority wins
44 // use class average distance to the target to break any possible ties
45
46 // a {category => {count => distance}} map
47 std::map<int, std::pair<int, double> > votes;
48 int winner = c[0]; // randomly assign an initial category
49
50 for (i = nabors.begin(); i != nabors.end(); i++) {
51 int count = ++(votes[c[i->first]].first);
52 double dist = (votes[c[i->first]].second += i->second);
53 if (count > votes[winner].first || /**//* check for a possible tie */
54 count == votes[winner].first && dist < votes[winner].second) {
55 winner = c[i->first];
56 }
57 }
58
59 return winner;
60}
61
2008年5月9日
【这文章为转载,尚未通过作者仔细分析】
其实数字图像处理的本质还是数字信号处理,但是还有一些广泛的知识可以利用,比如物理上成色的原理,人眼感知色彩的原理,形态学等,把这些原理的东西拿开就剩下数学了。
我看了半天书上表述的直方图均衡化,就是没弄明白,后来看了代码才恍然大悟,其实很简单。
定理:一维随机变量a~F(x),则F(a)~U[0,1],a从负无穷到正无穷,U[0,1]是标准均匀分布。
证明:(相反的思路)设b~U[0,1],由定义,
0 x<0
P{b<x}={ x 0<=x<=1
1 x>1
设某值域为[0,1]的单调增函数F(x)的反函数是F-1(x),则
考察F-1(b)的分布情况,由定义
P{F-1(b)<x}=P{b<F(x)}=F(x)
即F-1(b)~F(x)
令a=F-1(b),则b=F(a)
有a~F(x),且F(a)~U[0,1] |
这个定理说明了均匀分布的随机变量的地位,对于任意分布的随机变量,只要给出分布函数的反函数,就可能直接构造出来(不过大部分是很难有简单形式的)。
一张图片,可以看成是对现实景物的一次抽样,就是一个样本,样本有二重性,可以看成是随机变量,就某个特征,比如灰度,它有一定的分布,而直方图就是它的密度函数,均衡化就是先求出F(x),把密度函数逐段求和就行了,再用F(x)作用每一个像素,将原图像的a,变换成F(a),使直方图变得相对均衡。
实际实验效果比较恐怖,效果比较吓人,一个美女变成xxx,呵~另外由于是离散的变换,所以结果不会绝对均衡,有时甚至会严重失真。
2008年4月28日
【这文章为转载,尚未通过作者仔细分析】
1.块结构化网格
又称为组合网格,是求解不规则区域中的流动与传热问题的一种重要网格划分方法。根据问题的条件把整个求解区域划分为若干个小的区域(块),每一块中都用常见的结构化网格来离散,并且每一块中都可以采用适体坐标方法来生成网格。
块结构化网格可分为拼片式网格与搭接式网格,前者是在块与块交界处无重叠区域,通过一个界面相接,而后者则有部分区域重叠,搭接式网格又称为杂交网格。
2.边界层网格
CFD计算对计算网格有特殊的要求,一是考虑到近壁粘性效应采用较密的贴体网格,二是网格的疏密程度与流场参数的变化梯度大体一致。对于面网格,可以设置平行于给定边的边界层网格,可以指定第二层与第一层的间距比,及总的层数。对于体网格,也可以设置垂直于壁面方向的边界层,从而可以划分出高质量的贴体网格。Gambit中提供专门的边界层网格画法。
3.交错网格
所谓交错网格,是指将速度分量与压力在不同的网格系统上离散。也就是把速度u,v及压力p(包括其它所有标量场及物性参数)分别存储于三套不同网格上的网格系统。速度u存于压力控制容积的东、西界面上,速度v存于压力控制容积的南、北界面上,u,v各自的控制容积则是与速度所在位置为中心的。u控制容积与主控制容积(压力的控制容积)之间在x方向有半个网格步长的错位,而v控制容积与主控制容积在y方向上有半个网格步长的错位。
使用交错网格的目的:是为了解决在普通网格上离散控制方程时给计算带来严重问题。交错网格是SIMPLE算法实现的基础。
交错网格将标量(如压力,温度和密度)在正常网格节点上存储和计算,而将速度的各分量分别在错位后的网格上存储和计算,错位后网格的中心位于原控制体积大界面上。二维问题,就有三套不同的网格系统分别存储p,u和v,对于三维问题,就有四套网格系统,分别用于存储p,u,v和w。
自适应网格技术
自适应网格技术是指根据数值计算结果,反过来修改网格疏密布置或网格线的走向,使之与所计算的具体问题相适应的网格生成技术。