{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/greedy-projection-algorithm-explained/",
  "atlas": "https://www.pystone.net/?node=greedy-projection-algorithm-explained#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/greedy-projection-algorithm-explained.md",
  "context": "https://www.pystone.net/notes/greedy-projection-algorithm-explained.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:greedy-projection-algorithm-explained",
  "slug": "greedy-projection-algorithm-explained",
  "title": "贪婪投影算法Greedy Projection algorithm - 知乎",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "贪婪投影算法Greedy Projection algorithm 知乎",
  "contentRole": "unspecified",
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "unspecified",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "191fd31547fd284dda4650abe3e6849532cea38a5974fc05a217d34bbb0b8f29",
  "assets": [
    {
      "reference": "assets/v2-0f383e0c7be095b3b70d530df3c2ec31_l.jpg",
      "url": "/media/711e100a0c034c67a499.jpg",
      "mediaType": "image/jpeg",
      "contentHash": "711e100a0c034c67a499861bbeb8cb99ee9c9678315dcb28bc44cc5af56ffdd9",
      "byteLength": 4727,
      "width": 100,
      "height": 100
    },
    {
      "reference": "assets/v2-763534193a0452ce4ed1e61234339c49_r.jpg",
      "url": "/media/949aa44615bb49a2216e.jpg",
      "mediaType": "image/jpeg",
      "contentHash": "949aa44615bb49a2216ec2b12c4ec4e1d8e2fd1b2bd28c3c8eb50012f9048160",
      "byteLength": 44809,
      "width": 624,
      "height": 293
    }
  ],
  "headings": [
    {
      "depth": 1,
      "text": "贪婪投影算法Greedy Projection algorithm - 知乎",
      "anchor": "贪婪投影算法greedy-projection-algorithm---知乎",
      "citation": "https://www.pystone.net/notes/greedy-projection-algorithm-explained/#%E8%B4%AA%E5%A9%AA%E6%8A%95%E5%BD%B1%E7%AE%97%E6%B3%95greedy-projection-algorithm---%E7%9F%A5%E4%B9%8E"
    }
  ],
  "claims": [],
  "outgoing": [],
  "incoming": [
    {
      "id": "note:graphics-and-3d-reconstruction",
      "title": "图形学与三维重构",
      "url": "https://www.pystone.net/notes/graphics-and-3d-reconstruction/",
      "atlas": "https://www.pystone.net/?node=graphics-and-3d-reconstruction#knowledge-atlas",
      "label": "图形学与三维重构",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "本层中的“贪婪投影算法Greedy Projection algorithm - 知乎”导航项",
      "citation": "https://www.pystone.net/notes/graphics-and-3d-reconstruction/#%E6%9C%AC%E5%B1%82"
    }
  ],
  "contentMarkdown": "# 贪婪投影算法Greedy Projection algorithm - 知乎\n\n> 创建时间：2020/5/20 10:11\n\n[\n![](assets/v2-0f383e0c7be095b3b70d530df3c2ec31_l.jpg)\n](https://www.zhihu.com/people/xia-zhi-51-95)\n\n[明天的昨天](https://www.zhihu.com/people/xia-zhi-51-95)\n\n奋斗和学习在图像处理领域小虫一枚\n\n主要用于通过无序点云建立一个surface。输入无线点云集（点坐标以及估算的法向量）通过kdtree搜索近邻点，投影到切平面，通过角度和距离筛选、可见性（以参考点看过去，是否有交叉边存在）筛选，建立三角面片形成surface。\n\nThe Greedy Projection algorithm works by maintaining a list of points from which the mesh can be grown (“fringe” points) and extending it until all possible points are connected. Triangulation is performed locally, by projecting the local neighborhood of a point along the point’s normal and connecting unconnected points.\n\nThe algorithm is based on incremental surface growing principle, following a greedy type approach. The algorithm starts by creating a starting triangle and keeps on adding new triangles until all the points in the cloud have been considered or there no more valid triangles which can be connected to the resultant mesh.\n\n **1.** **Nearest neighbor search:** For each point ‘p’ in the point cloud, a k-neighborhood is selected.\nThis neighborhood is created by searching the reference point’s nearest k-neighbors within a sphere of radius r. The radius is defined as µ.d, where d is the distance of the point p from its closest neighbor and µ is the user-specified constant to take into account the point cloud density.\n\nTo **find the nearest neighbors for the given point** in the point cloud, Kdtree nearest neighbor search has been used.\n\nThe points in the cloud are assigned various states depending on their interaction with the algorithm: _free, fringe, boundary, and completed_.\n\na) Initially, all the points in the cloud are in the free state and **free** points are defined as those points which have no incident triangles. b) When all the incident triangles of a point have been determined, the point is referred to as of **completed** state.\n\nc) When a point has been chosen as a reference point but has some missing triangles due to the maximum allowable angle parameter, it is referred to as a **boundary** point.\n\nd) **Fringe** points are the points that have not yet been chosen as a reference point\n\n **2.** **Neighborhood** **projection using tangent planes** : the neighborhood is projected on a plane that is approximately tangential to the surface formed by the neighborhood and ordered around p.\n\n **3.** **Pruning** : The points are pruned by **visibility and distance criterion** , and connected to p and to consecutive points by edges, forming triangles that have a maximum angle criterion and an optional minimum angle criterion. The points in the point cloud are pruned depending on many criterion.\n\na) Pruning by **distance\ncriterion**: a distance criterion is applied to prune down the search for candidate adjacent points in the spatial proximity of current reference point using kd-tree.\n\nb) Further points which lie **outside the spher** e of influence centered at reference point **are rejected**. The chosen points are referred to as the candidate points.\n\nc) Choice of projection plane: the candidate set of points obtained after applying the distance criterion are projected on the approximate tangent plane.\n\nd) **Angle ordering** : a new **local coordinate system** is defined with the **reference point as the origin** and the **plane projection of the previous step serves as the xy-plane**. All the points in the candidate set are projected this plane. Ordering around the ref. point is based on the angle (ϴ) between the x-axis of the local coordinate system and the vector from origin to the projected candidate point.\n\ne) Visibility: the points which potentially form a self-intersecting mesh are discarded. The algorithm defines **two edge types** for checking this condition:\n\nI. **Boundary Edge** : an edge with only one triangle incident on it. These edges connect fringe and/or boundary points.\n\nII. **Internal** **Edge** : connect the completed points with any other points.\n\nThe plane is projected using the reference point, candidate set of points and the boundary edges. In case, the line of sight from the reference point to a candidate\nvertex is obstructed by an edge, the point is occluded.\n\n![](assets/v2-763534193a0452ce4ed1e61234339c49_r.jpg)\n\n _< surface construction from points cloud> Navpreet Kaur Pawar 2013_\n\n _< A Fast and Efficient Projection-Based Approach for Surface Reconstruction> Gopi, M. & Krishnan, S. 2000_\n\n编辑于 2017-12-07\n\n[点云库PCL](https://www.zhihu.com/topic/19785388)\n"
}
