关于silhouette提取的方法,Gooch在02和03年都做过总结,分两个分支,
   一是基于物体空间的轮廓提取方法,有
   * Brute Force
   * Edge Buffer
   * Probabilistic
   * Gauss Map Arc Hierarchy
   * Normal Cone Hierarchy
   * Implicit Surfaces
   * NURBS Surfaces   (我会在下面的回复中,慢慢的把我对每个方法的理解写出来。)
    
   二是基于图像(2D image)空间的轮廓提取方法,这个我认为是基于像素(pixel)的,所以生成的位图(bitmap),而我要的结果是向量图(vector image),所以就把这个分支的方法都否了。现在还不知对错,请告人指教。
   
   从03年后,关于silhouette 提取的论文有很多,但是我看到的都是对原有方法的细枝末节的改进,或者我看得不够多,有对这个方向感兴趣的同仁,请不吝赐教。
   

解决方案 »

  1.   

    对于silhouette 的定义方法有两种,
    一是对于polygnal model,就是全部由三角形组成的模型,研究它的每一条边,如果此边连接的两个面一个是前向面,一个是后向面(基于一定的视线方向view vector),则该边是silhouette. 
    二是对于smooth model, 研究每一个点的法向量,与视点到该点的视向量的夹角,如果是90度,则该点是silhouette.
    我的研究基于前者。
      

  2.   

    Brute Force算法是最经典的轮廓提取算法,他确保了边界提取的完整性,即所有的边界都会找出,但是时间代价很大。Brute Force算法完全按照定义来执行。首先对model,建立一个 edge list, 对于每一条边,检查它相关联的两个面,如果一个为前向面,一个为后向面,则把该边加入silhouette edge list中。如此循环,直到所有的轮廓边都被找出。
    该方法的缺点很明显,每一次旋转物体,或者改变视线方向,都要重新计算每一个面的可见性,当model数据相当大时,显然不能满足用户失实交互的需要。
      

  3.   

    Edge Buffer算法是对Brute Force算法的改进,它建立一个face list代替了Brute算法里的Edge list,这样只对每个面检测一次可见性,然后用flag纪录每个面的前向后向性,再对其关联的边测定是silhouette与否。时间复杂度从O(边的个数)提高到了O(面的个数)。