Come what may, heaven won't fall.
日历
网志分类
· 所有网志 (39)
· ACM & Algorithm (6)
· English Study (4)
· 课程设计 (3)
· 大学 (19)
· 读研 (7)
· Locations of visitors to this page
最新的评论
站内搜索
友情链接
· 我的歪酷
· KangKang Yin_@_MSRA
· Weiwei Xu ___@_MSRA
· MSRA blog
· Zhou Lin @ ZJU
· ZJU Online Judge
· TopCoder

订阅 RSS

0013409

歪酷博客

8600 @ 2009-05-07 21:47

最近在看一些有关摄像头的程序时,偶然发现了一个很有意思的实验,就是用摄像头来测距。改天找一个激光笔也来玩下看:)

如何用摄像头来测距(opencv) 作者:郭世龙

       最近一直忙着找工作,blog都长草了,今天把以前作的一个东西放上来充充门面吧。记得在哪看到过老外做的这个东西,觉得很好玩,就自己也做了一个。在摄像头下面固定一个激光笔,就构成了这个简易的测距装置。看一下图吧。
      

     

原 理

假设激光束是与摄像头的光轴完全平行,激光束的中心落点在摄像头的视域中是最亮的点。激光束照射到摄像头视域中的跟踪目标上,那么摄像头可以捕捉到这个点,通过简单的图像处理的方法,可以在这侦图像中找到激光束照射形成的最亮点,同时可以计算出Y轴上方向上从落点到图像中心的象素的个数。这个落点越接近图像的中心,被测物体距离机器人就越远。由下图图可以计算距离D:

(1)

等式中h是一个常量,是摄像头与激光发射器之间的垂直距离,可以直接测量获得。

θ可通过下式计算:
θ=Num*Rop+Offset      (2)                           
其中:Num是从图像中心到落点的像素个数
Rop是每个像素的弧度值
Offset是弧度误差
合并以上等式可以得到:
(3)
Num可以从图像上计算得到。Rop和Offset需要通过实验计算获得。首先测量出D的准确值,然后根据等式(1)可以计算出准确的θ,根据等式(2)可到只含有参数Rop和Offset的方程。在不同的距离多次测量D的准确值计算θ,求解方程组可以求出Rop和Offset。这里Rop=0.0030354,Offset=0.056514344。





 
8600 @ 2009-05-05 21:07

纠结了一段时间的图形学作业终于完成了:

(1) zbuffer扫描线
扫描线扫描过程中把所有像素点的信息记录下到GLubyte imageData[M_HEIGHT][M_WIDTH][3]; 最后用glDrawPixels画.
由于大量使用了STL,在VS2005 debug下是release的N倍................. 
结果比较搓, 截的2个图:

21177个点,24975个面:

 
4721个点,9395个面:


(2) 光线跟踪
第一次检查时没有用面光源, 漫射也没处理好, 老彭给了C,如下图 (阴影很差, 没有反走样, 球面的反射有问题等....)


修改了一晚, 加上面光源反走样等等, 效果好了些, 拿到了B+, 如下图:
用了kd-tree跟一些迭代中的剪枝之后还是跑了80多分钟才出来, 看来我的加速还需很大的改进



Anyway, 终于结束了这个作业,可以缓一口气,,,,,,,,,,,,,,,,,,,,,,,,,,,
开始下一步计划..............................................................................


 
8600 @ 2009-03-08 22:40

速度 + 调试能力是要解决的最关键问题, 直接导致RT变化剧烈, 500分题目很多时候都有思路, 但不是实现出问题就是调不出来--_--!!, 这个悲哀的历史帖在这里, 希望下次贴的时候能力真的能提高了.  Work hard!



 
8600 @ 2009-02-08 19:15

1.与或图的解图及其费用
  在一棵与或树中,加到一个节点上的""或者""标记取决于该节点与其父辈节点的关系。一种情况是由总数据库标记的一个父辈节点拥有一组与后继节点,每一个后继节点都用一个分量数据库来标记。另一种情况是由分量数据库标记的一个父辈节点拥有一组或后继节点,每个后继节点都用对该分量数据库应用一条选出的规则而得到的新数据库来标记。
  我们所要讨论的一般是与或图,而不是与或树这种特殊情况,因为应用不同序列的规则可能生成相同的数据库。例如,用来标记某一节点的某一分量数据库,既可以从已分解的一个复合节点得到,也可以使用某一条规则从另一个节点得到。在这种情况下,对于其中一个父辈节点来说它可以叫做或节点,而对另一个父辈节点它又可以叫做与节点。因此,我们一般不把一个与或图的节点叫做与节点或者或节点,而是引入某个适合于图的更一般的标记。不过,我们仍然把这些结构叫做与或图,并在讨论与或树时继续采用与节点和或节点等术语。
  这里我们把与或图定义为超图,并且不用弧线来连接节点对,而用几条超弧线来连接一个父辈节点和它的一组后继节点。这些超弧线又叫做连接符。每个k—连接符是从一个父辈节点指向一个含有k个后继节点的集合(如果所有连接符都是单一连接符,那么我们使得到一个普通图的特例)。图3.13给出一个与或图的例子。
  图中,节点n。有二个1—连接符指向其后继节点n1,还有一个2—连接符指向其后继节点集合{n4n5}。在我们所用的各个图例中,对于k>1k-连接符,我们都用一般圆弧连接从父辈节点到其后继节点集合各元之间的所有弧线来表示(如果采用原先的术语,相对于它们共同的父辈节点n。,节点n4n5可以称为一组与节点,而n1可称为或节点。而关于节点n8,它既居于其父辈节点n5的一个与节点集合,又是其父辈节点n4的一个或节点) 

                                         

3.13 与或图举例


  在与或树中,每个节点最多只有一个父辈节点。在与或树和与或图中,我们把没有任何父辈节点的节点叫做根节点。在与或图中,我们把没有后继节点的节点叫作叶节点(对于与或树则叫做端节点)
  一个可分解的产生式系统规定了一个隐含的与或图。初始数据库对应于图中一个特别的节点,叫做起始节点。起始节点有一个外向连接符连到它的一组后继节点,这些后继节点对应于初始数据库的分量(假如初始数据库可以加以分解的话)。每条产生式规则在隐含图中都对应于一个连接符。这种连接符指向的那些节点对应于应用规则和分解数据库后得到的分量数据库。在隐含图中,与满足产生式系统终止条件的数据库相对应的是一个终节点集合。
  产生式系统的任务可以看做是寻找从起始节点到终节点的某个解图。粗略地说,从一个与或图的节点n到节点集合N的一个解图类似于一个普通图中的一条路径。这个解图的求法如下:从节点n开始,正确地选择一条外向连接符,从该连接符所指向的后继节点出发,我们可以继续选用一个外向连接符,依此类推下去,直到最后由此产生的每个后继节点都是集合N中的一个元为止。图3.14中给出了图3.13中从节点n。到{n7n8}的两个不同的解图。


3.14 两个不同的解图

  假设我们的与或图中不包含环,即在与或图中不存在这样的节点,它的后继节点同时又是它的祖先。因而节点存在一种局部的顺序,它能保证我们所采用的递归过程的终止。今后,我们就一直使用这种无环性假定。
  现在让我们来为解图下个精确的递归定义。
  设某个与或图G中,从节点n到一节点集合N的一个解图记作G'G'G的子图。若nN的一个元,则G'是由单一节点n组成的;若有一个指向节点{n1n2......nk}的外向连接符K,使得从每个niN有一个解图,其中i=12……k,则G'由节点n、连接符K,节点{n1nk}以及从{n1nk}中的每个节点到N的解图所组成,否则从nN不存在解图。
  象在普通图中采用的弧线费用叶一样,在与或图中给连接符指定一定的费用往往是很有用的(这些费用模拟规则应用的代价。我们仍然需要假设每个费用都大于某个小的正数e)。然后,连接符的费用便可用来计算一个解图的费用。设从任意节点n到节点集合N的一个解图费用记为k(nN),则值k(nN)可以递归计算如下:
  若nN的一个元,则k(nN)=0,否则,n有一个通到解图中后继节点集{n1ni}的外向连接符。令该连接符的费用为Cn,于是我们可得

k(n,N)=Cn+k(n1,N)+…+k(ni,N)

从上式可以看出,从节点nN的一个解图G'的费用等于离开n的外向连接符(G')的费用加上从n的各后继节点(G’)N的每个解图费用的总和。由于我们有了无环的假设,所以该递归定义是满足的。
  在一个解图费用的定义中,我们可能要不止次地计算解图中某些连接符的值。一般地说,离开某节点m的一个外向连接符的费用被算进从nN的一个解图费用中去的次数,恰好等于在解图中从nm的路径数。因此,在图3.14中,如果每个k—连接符的费用为k,两个解图的费用分别为87
  除了寻找从起始节点到一组终节点的任意解图之外,我们还可能想找出具有最小费用的一个解图来。我们称这样的一个解图为最佳解图。我们把从n到一组终节点的最佳解图的费用记作函数h*(n)

2.AO*算法
  让我们来描述一种具有启发成分的估价函数的搜索过程,它可以被设计来用于与或图。h(n)h*(n)的一个估计,h*(n)则是从节点n到一个终节点集合的一个最佳解图的费用。正如图搜索一样,如果h满足一定的限制,则搜索过程语句是可能得到简化的。
  在我们的讨论中,对h加以单调限制,即对隐含图中从节点n指向其后继节点n1nk的每个连接符施加限制。我们假设

h(n)≤c+h(n1)+…+h(nk)

其中,c为连接符的费用。这一限制类似普通图中对启发函数的单调限制。对于n在终节点集合中的情况,若有h(n)=0,则单调限制意味着hh*的一个下界,即对于所有的节点n,有h(n)≤h*(n)
  现在,我们可以把与或图启发式搜索过程陈述如下:
AO*
过程
  (1) 建立一个搜索图G,使其仅仅包含起始节点S,对应于节点S的费用为qs=h(s)。如果S为终节点,则标记SSOLVED
  (2) unit1 S已经标记SOLVEDdo
  (3) begin
  (4) 通过跟踪G中从S出发的有标记的连接符(G的连接符将在以后的步骤中标记),计算G中的一个局部解图G'
  (5) select G' 的任意一个非终叶节点n(将在以后说明如何选择)
  (6) 扩展节点n,生成它的全部后继节点,并把它们作为n的后继节点设置在G中。于未曾在G中出现过的每一个后继节点nj,相应的费用q(nj)=h(nj)。对这些后继节点中属于终节点者,标记SOLVED,并赋其值为0
  (7) 建立一个正好包含节点n的单一节点集合S
  (8) until S为空,do
  (9) begin
  (10) S中移出这样的节点m,这个mG中的后裔不出现在S中。
  (11) 根据以下步骤修改m的费用q(m):对于从m指向节点集{n1i,nki}的每个连接符,计算

qi(m)=Ci+q(n1i)++q(nki)

式中,q(nji)(其中j=12k)或者通过这一内循环在上述某道运算中刚刚计算过,或者,这是第一道运算,那么它们已在第6步中计算过。令q(m)为全部外向连接符qi(m)中的最小值,并对这个具有最小值的连接符加以标记,如果以前的标记情况与此不同,则抹掉以前的标记,如果通过这个连接符的全部后继节点都已标记SOLVED,则标记此节点mSOLVED
  (12) 如果m已标记为SOLVED,或者m的修正费用不同于它的前一道费用,则把m的所有那样的父辈节点都添加到S中去,这些父辈节点的通过某个有标记连接符的后继节点之一就是节点m
  (13) end
  (14) end
  AO*算法可以理解为下列两个主要运算的反复。首先,一个自上而下的图生长运算(4至第6),通过跟踪有标记的连接符寻找最好的局部解图。这些以前计算过的标记指明在搜索图中离开每个节点的当前的最好局部解图(在该算法终止之前,最好的局部解图尚未产生它的全部终叶节点,所以称它为局部的)。对这个最好的局部解图的非终叶节点之一进行扩展,并把某个费用赋给它的后继节点。
  AO*算法中的第二个主要运算是一个自下而上的费用修正、连接符标记和SOLVED标记的过程(7-12)。从刚被扩展的节点开始,此过程修正其费用值(利用其后继节点最新计算的费用),并把外向连接符标记到被估计为达到终节点的最好路径上。图中,这个修正值的估计是向上传送的(图的无环性保证这种向上传送过程不会遭到循环)。修正费用q(n)是从n到一组终节点的一个最佳解图费用的一个修正估计。仅仅那些经过费用修正的节点,其祖先才有可能拥有它们的修正值,因而只需要考虑这些祖先。由于我们曾经假设h是单调限制的,费用的修正只可能是费用的增大。因此,并非所有的祖先都需要进行费用修正,只有那些具有最好的局部解图而且含有修正费用的后裔之祖先才需要进行费用修正(所以有第12)
  AO*算法在一些特殊场合可以简化,可以进行改进,提高算法的性能,限于篇幅,暂时不对这些展开讨论。
[http://jxzy.lzptc.edu.cn/ziyuan/20/!rgzn/rengongzhineng/kejian/AI/Ai/chapter3/325.htm]

 



 
8600 @ 2008-10-23 18:51

Introduction
The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. It is free software under the GNU General Public License.
The library provides a wide range of mathematical routines such as random number generators, special functions and least-squares fitting. There are over 1000 functions in total with an extensive test suite.
The complete range of subject areas covered by the library includes,
Complex Numbers                                  Roots of Polynomials
Special Functions                                   Vectors and Matrices
Permutations                                            Sorting
BLAS Support                                          Linear Algebra
Eigensystems                                          Fast Fourier Transforms
Quadrature                                                Random Numbers
Quasi-Random Sequences                  Random Distributions
Statistics                                                    Histograms
N-Tuples                                                    Monte Carlo Integration
Simulated Annealing                              Differential Equations
Interpolation                                             Numerical Differentiation
Chebyshev Approximation                  Series Acceleration
Discrete Hankel Transforms                Root-Finding
Minimization                                             Least-Squares Fitting
Physical Constants                                IEEE Floating-Point
Discrete Wavelet Transforms              Basis splines 
Unlike the licenses of proprietary numerical libraries the license of GSL does not restrict scientific cooperation. It allows you to share your programs freely with others.
http://www.gnu.org/software/gsl/



 
8600 @ 2008-10-23 12:19

1.如何进行文献检索
    我是学自然科学的,平时确实需要不少外文文献,对于自然科学来讲英文文献检索首推Elsevier,Springer等。虽然这些数据库里面文献已经不算少了。但是有时还会碰到查不到的文献,而这些文献的数据库我们所在研究所或大学又没有买,怎么办?我基本通过以下向个途径来得到文献。
1.首先在Google 学术搜索里进行搜索,里面一般会搜出来你要找的文献,在Google学术搜索里通常情况会出现“每组几个”等字样,然后进入后,分别点击,里面的其中一个就有可能会下到全文,当然这只是碰运气,不是万能的,因为我常常碰到这种情况,所以也算是得到全文文献的一条途径吧。可以试一下。同时,大家有没有发现,从Google学术搜索中,还可以得到一些信息,Google学术搜索中会显示出你搜索文章的引用次数,不过这个引用次数不准确,但是从侧面反应了这篇文章的质量,经典文章的引用次数绝对很高的.同时如果你用作者进行搜索时,会按引用次数出现他写的全部的文章,就可以知道作者的哪些文章比较经典,在没有太多时间的情况下,就可以只看经典的.
2.如果上面的方法找不到全文,就把文章作者的名字或者文章的title在Google 里搜索(不是Google 学术搜索),用作者的名字来搜索,是因为我发现很多国外作者都喜欢把文章的全文(PDF)直接挂在网上,一般情况下他们会把自己的文章挂在自己的个人主页(home page)上,这样可能也是为了让别的研究者更加了解自己的学术领域,顺便推销自己吧。这样你就有可能下到你想要的文献的全文了。甚至可以下到那个作者相近的内容的其它文章。如果文献是由多个作者写的,第一作者查不到个人主页,就接上面的方法查第二作者,以此类推。用文章的title来搜索,是因为在国外有的网站上,例如有的国外大学的图书馆可能会把本校一年或近几年的学术成果的Publication的PDF全文献挂在网上,或者在这个大学的ftp上也有可能会有这样类似的全文.这样就很可能会免费下到你想要的全文了.
3.如果上面两个方法都没有查到你要的文献,那你就直接写邮件向作者要。一般情况下作者都喜欢把自己的文献给别人,因为他把这些文献给别人,也相当于在传播他自己的学术思想。下面是本人向老外作者要文献的一个常用的模板:
Dear  Professor ×××
     I am in ××× Institute of ×××, Chinese Academy of Sciences. I am writing to request your assistance. I search one of your papers:

。。。。。。。。。。。。。。。。。(你的文献题目)

but I can not read full-text content, would you mind sending your papers by E-mail? Thank you for your assistance.
Best wishes !(or best regards)

×××

    本人的经验是讲英语的国家的作者给文章的机率会大,一般你要就会给,其它不讲英语的国家,如德国,法国,日本等国家的作者可能不会给。出于礼貌,如果你要的文献作者E-mail给你了,千万别忘记回信致谢.
4.最后一种方法其实大家都熟悉,就是发贴在小木虫上求助。我还用另一种方法,就是直接让我所在的研究所图书馆的管理员帮我从外面的图书馆文献传递。不过有的文献可能是要钱的。一页0.3元,由于我们看文献的钱都是由课题出,所以也就不太考虑钱的问题了。

2.如何快速而准确地获得最新的科研信息.
    如何快速准确地从浩如烟海的信息海洋中获取所需的信息,并学会分析、利用信息资源已经成为人们立足于信息社会的一个重要技能.提高自己在当今复杂的信息世界中准确、快速地获取信息的能力,对我们科研人员是至关重要的.我们要时时刻刻了解最新的科研成果,最主要的途径还是要了解最新的科研文献,但是对于我们常用的数据库,我们又不可能每天都去访问一次数据库来查看是否有最新的文献出来,而对于许多国外的数据库.文章的出版效率非常高,有的是每周出几篇新的文章,有的是每半月出一次,还有一月出一次的,所以大家发现很难有精力保持每天都去浏览数据库.但是大家有没有发现,国外的数据库有个很好的服务功能就是如果你在其数据库的网站上注册了邮箱,数据库就会自动在每期有新的文章出来时把文章的内容及链接发到你的邮箱里,直接通知你.这样就对我们获取到最新的信息提供了方便.以Elsevier为例,在数据库网站上有"Alerts"点点击进入,要求你输入"User Name"和"Password",这是对已经注册了邮箱的人进行的.如果你还没有注册,同样会看到右边有一行英语"If not,  Register Now. It's FREE and allows you to"这时点击右边的"Register Now",就可以进入进行注册,选择你要求的期刊以及你所研究的领域等等,当然还要填好你接受邮件的邮箱,注册成功后,以后就可以收到最新的文献了,同时你可以随时修改你的接受邮件的邮箱.不仅是象Elsevier这样的数据库有这个功能.几呼所有的外文数据库都有"Email-Alert"这一功能.大家可以试试.

3.如何进行文献阅读

    其实做科研,不看文献要做好科研,可以说一点可能都没有。只有广看论文,深入学习,才能厚积薄发,写出响当当的文章出来。读文献一定不要心浮气躁,或者就是想着混个毕业。相反我们要沉下心来,大量阅读文献,在读的过程中有的文献看懂了,但是看不懂的文献也可能会居多。看懂的认真学习借鉴,看不懂的 深入探索,实在不行就暂时放下,过一段时间,随着知识和能力的提高慢慢也就弄明白了一些。即使还是看不懂,但是心里知道有那么回事,为将来的继续深造做了铺垫。另外千万不要只是为看文献而看文献,我们看的目的是为了能为我们自己的科研所用,所以看的过程中一定要和你自己的数据相结合,当看完一篇文献后,要好好总结,如果用自己的数据,又该怎么样解释。还有一些牛刊物上的文章,不但要学习文章里面的知识,还要学习牛人写文章的文风。好的文章肯定会有好的文风,这些都是我们将来写文章要学习的。
      另外相信很多搞科研的同行会有个感觉,就是看过的文献,如果只是做做标记,划下划线,还是很容易忘记,过段时间要查询起来也费事。尤其是看过的文献有几百,上千篇时,虽然可以归类整理,但效果还是不好。
      我建议大家边看一篇文献时,边打开word文档,边整理文章出彩和重要的部分,然后复制过去,标上文献的标题和作者等相关信息,把每一类文献归为一组。 方法操作简单,将来要查询和反复的时候会有很大帮助,尤其在写文章时,相关文献及其亮点都一目了然。这个方法积累久了,对提升写作和阅读都有很大帮助,除了这样,我还有时把一些很经典的段落或都语句翻译成中文,专门整理在一个本本上,这样不但在以后写文章时直接拿出来看,省事省时间,还能锤炼英汉互译的能力,很有利于以后你和老外交流时的口语表达。

      最后,请大家始终记住,我们查文献都是为了科研,千万不要只查不看,费了那么大劲查到了就一定要看完.就算是你大概的看了一下也是有用的.同样对科学问题要辩证的看待,文献上别人的观点也只是一家之言,而且不要迷信权威.

“ 科学本身是人类的一种实践。科学研究是一个思考过程。科学行动则是推行某种思考过程的活动,其目的是为了检验这些思考过程的有效性,进而修正和改善这些思考过程,以期达到最高的认识。像一切科学实践一样,科学的判断力取决于个人的经验、信仰和情绪。 我们中间的许多人,或者说我们全体,在我们的专业经历中,都犯过这样或那样的错误。科学工作者应当有虚怀若谷的精神,敢于摒弃先入之见,敢于摆脱对错误思想感情上的依附.