Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >点云法线

点云法线

作者头像
NT4.4
修改于 2019-10-18 02:03:04
修改于 2019-10-18 02:03:04
2.5K0
举报
文章被收录于专栏:图形视觉图形视觉

原文链接

点云法线定义

对于一个三维空间的正则曲面R(u, v), 点(u, v)处的切平面(Ru, Rv)的法向量即为曲面在点(u, v)的法向量。点云是曲面的一个点采样,采样曲面的法向量就是点云的法向量。

我们给每个点一个线段来显示法线,线段的方向为法线方向,如下图所示。这种显示方法虽然简单,但是不方便查看法线的正确性。下面介绍的点云渲染,能更加直观的查看法线的正确性。


点云法线应用
  • 云渲染:法线信息可用于光照渲染。如下图所示,左边的点云为纯颜色渲染,右图是Phone光照模型的渲染效果,它是真实光照模型的一个近似。它模拟的是漫反射光照,漫反射光照符合Lambert余弦定律,即漫反射光强与N * L成正比,N为法线方向,L为点到光源的向量。所以,在模型边缘处,N与L近似垂直,着色会比较暗。

点云渲染也可以用来检查法线的正确性。如下图所示,光源在模型的正前方,左边的渲染图看起来更加符合我们的直观感觉,右图的渲染方式看起来有些不对,是因为法线不准导致的。通过点云的渲染,可以快速定性的检查法线是否正确。至于右图为什么看起来不对,这个就是一个直观感觉,正确的渲染图看多了,就会有感觉了。

  • 点云重建:对于一个封闭曲面,我们可以在空间中定义一个函数形状Indicator := 曲面内部为1,曲面外部为0。则这个形状函数的梯度只有在曲面上不为0,这个梯度方向就是曲面的法线方向。我们可以应用法线信息,来计算这个形状函数。有了形状函数,就可以通过提取等值面的方法来提取这个点云的形状曲面。
  • 区分薄板正反面:有时候扫描很薄的板子,板子正反面的扫描点距离很近,有些扫描仪精度低,就更使得正反面的点混在一起,如下图所示,蓝色和绿色的点分别代表了正反面的扫描点。这时候法线能很好的区分正反面。法线的定向应该在扫描时就做好,如果后期来整体定向,薄板正反面的点法线就区分不开了。
  • 法线贴图:下面两个图是一个人脸网格的UV展开,属于平面网格。它们的区别在于法线信息,右图的法线继承了原始网格的法线,它使得平面网格也可以渲染出凹凸感。这个技巧常用于游戏场景的渲染,用低面片数的网格加上高质量的法线贴图信息,来增强模型的几何凹凸感。

点云法线计算

点云采样于物体表面,物体表面的法线即为点云法线,故可先对物体表面的几何进行估计,即可计算出点云法线。一般可用低阶多项式曲面进行局部拟合,如左图所示。如果点云均匀分布,希望计算速度快,也可以用平面进行局部拟合,平面法线即为点云法线,如右图所示。

平面的局部拟合,可以采用PCA(主成分分析)的方法。因为曲面局部是平坦的,法线所在的方向是主成分最低的方向,也就是PCA里面最小特征值对应的特征方向。具体操作如下:1)给每个点计算K邻近邻域(也可以用半径邻域);2)计算PCA的协方差矩阵 Cov = ∑ (Ni – C) X (Ni – C),其中Ni为邻域点,C为中心点。这个协方差矩阵的最小特征值对应的特征向量即为这个点的法线方向。

在特征比较尖锐的地方,如左图所示,法线计算容易被光滑掉。右图直线是物体真实的几何,可以比较红色法线方向的差别。特征点的法线,可以用迭代权重的方法来修正,如先用平面局部拟合,然后给局部的点计算权重,离平面越远的点权重越小,然后再用带权重的点局部拟合平面,如此迭代即可。


点云法线定向

点云法线经过上面介绍的PCA计算以后,还有一个问题是全局定向。法线有两个互为相反的方向。所谓全局定向,就是视觉上连续的一片点云法线方向要一致,片于片之间的定向也要视觉一致。如下图所示,左图的法线定向是乱的,而右图的法线有一致的定向。对于任给的一个点云,想要完全正确的定向,是不可能的,因为信息的缺失,有些局部上的正确定向是不可能的。但是,也有一些启发式的方法来给点云法线定向,一般情况下是可以正确有效的定向的。

下面介绍一种简单的方法,它是图形学学者Hugues Hoppe在1992年发表的一篇Siggraph论文提到的方法。Hugues Hoppe目前是Google研究院的一名学者,他之前微软研究院工作,毕业于华盛顿大学。早期发表了很多关于曲面重建和网格优化的论文。

如果点云分布比较均匀,在光滑的地方,相邻两个点法线的夹角会很小,可以认为近似平行,即|Ni * Nj| ≈ 1,如果定向一致,则Ni * Nj ≈ 1。一个经典的定向方法是,给点云的每个点找k个最近点,并连上k条边,这样点云就变成一个图结构了,也叫Riemannian图。然后给每条边一个权重w = 1 - |Ni * Nj|。w越小,表明两点之间的法线越接近。然后从某一点出发,找出这个图的最小支撑树(Prim算法和Kruskal算法),并使得相邻点的定向一致。

这个定向方法在不光滑的地方,距离很近的薄板等情况下,可能会出问题。另外,如果点云有多个片区,虽然每个片区内部可以定向一致,但是片区之间的整体定向也是很难确定的。有不少论文针对这些情况设计了新的定向方法,但是新方法的条件假设也更多了。从全局效果来讲,不如这个方法的适普性好。因为算法假设越少,适普性也就越好。


扫描数据的完美定向

扫描数据是可以完美定向的。因为扫描得到的深度点云,法线与相机方向(Z轴)的夹角小于90度。由于法线有两个互为相反的方向,取与相机方向夹角小于90度的方向(向量点积大于0)。点云做了刚体变换(Matrix4x4::TransformPoint)后,点云法线也要做相应的变换(Matrix4x4::RotateVector,注意坐标点和向量的刚体变换是有区别的)。法线只有在最初的相机坐标系下是可以完美定向的。之后一旦做了刚体变换,想要再去全局定向,就只能采用之前介绍的“法线如何定向”的方法。这些全局定向的方法,都不能做到一定正确,它只能保证每个点云小片的定向一致,片之间的定向一致是没法保证的。

有兴趣的读者,可以参考视频版本

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CG-Assignment2
本次作业在第一次作业的基础上,增加一个bezier曲面,并对场景添加光照和纹理效果。具体要求如下:
alanzeng
2025/01/14
530
CG-Assignment2
国内首次!山东大学全新点云法向估计算法荣获SIGGRAPH最佳论文奖
2023 年 7 月 7 日,计算机图形学顶级会议 ACM SIGGRAPH 2023 最佳论文奖评选结果揭晓。其中,山东大学计算机科学与技术学院交叉研究中心(IRC)的科研团队发表的学术论文 “Globally Consistent Normal Orientation for Point Clouds by Regularizing the Winding-Number Field” 被评为五篇最佳论文之一。这是自 SIGGRAPH (NA) 设立最佳论文奖以来,国内科研团队首次以第一单位荣获该奖项。
机器之心
2023/08/08
3480
国内首次!山东大学全新点云法向估计算法荣获SIGGRAPH最佳论文奖
LayaAir技术分享: Shader 光照模型详解
现实世界中,我们看到的任何物体都受光照的影响。没有光,我们也就看不到任何东西,因为光,我们才能感知到这个丰富的世界。而在3D渲染中为了能获得更加真实的渲染效果,光照计算就不可或缺。
Layabox Charley
2021/07/08
1.8K1
LayaAir技术分享: Shader 光照模型详解
音视频开发之旅(42)-光照基础(一)
环境光(Ambient Lightiing)不来自任何特定方向的光,在经典光照模型中会用一个常量来表示 使用时只需要对其片源着色器添加一个环境光常量,作为gl_Fragcolor的调制即可_
音视频开发之旅
2021/04/19
5660
音视频开发之旅(42)-光照基础(一)
基于局部凹凸性进行目标分割
Object Partitioning using Local Convexity
点云PCL博主
2019/12/31
1.8K0
基于局部凹凸性进行目标分割
PCL点云特征描述与提取(1)
3D点云特征描述与提取是点云信息处理中最基础也是最关键的一部分,点云的识别。分割,重采样,配准曲面重建等处理大部分算法,都严重依赖特征描述与提取的结果。从尺度上来分,一般分为局部特征的描述和全局特征的描述,例如局部的法线等几何形状特征的描述,全局的拓朴特征的描述,都属于3D点云特征描述与提取的范畴,
点云PCL博主
2019/07/31
2.8K0
PCL点云特征描述与提取(1)
【OpenGL】二十二、OpenGL 光照效果 ( 模型准备 | 光照设置 | 启用光照 | 启用光源 | 设置光源位置 | 设置光照参数 | 设置环境光 | 设置反射材质 | 设置法线 )
介绍光照前 , 先将模型准备好 , 绘制一个放平的三角形 , 使三角形处于 xz 平面 , xy 平面指的是屏幕所在的平面 , xz 平面的三角形只能看到一条线 ;
韩曙亮
2023/03/28
6220
【OpenGL】二十二、OpenGL 光照效果  ( 模型准备 | 光照设置 | 启用光照 | 启用光源 | 设置光源位置 | 设置光照参数 | 设置环境光 | 设置反射材质 | 设置法线 )
CVPR 2021 | dMaSIF:基于蛋白质表面信息的高效端到端表征学习
今天给大家介绍发表在CVPR2021上的一项工作。在这项工作中,作者提出了一个新的蛋白质结构深度学习框架。该方法将蛋白质原子原始 3D 坐标和化学类型作为输入,利用原子点云和高效几何卷积层实时计算和采样分子表面,以端到端的方式学习蛋白质结构特征。实验证明,在相互作用位点识别和蛋白质-蛋白质相互作用预测两项任务中,该方法以更快的运行时间和更少的参数实现了最先进的性能。
DrugScience
2021/09/22
2.2K0
CVPR 2021 | dMaSIF:基于蛋白质表面信息的高效端到端表征学习
[CG编程] 基本光照模型的实现与拓展以及常见光照模型解析
0.前言 这篇文章写于去年的暑假。大二的假期时间多,小组便开发一个手机游戏的项目,开发过程中忙里偷闲地了解了Unity的shader编写,而CG又与shaderLab相似,所以又阅读了《CG教程》、《GPU 编程与CG 语言之阳春白雪下里巴人》学习图形学的基础。尝试编写unity shader时还恶补了些3D数学。这些忙里偷闲的日子,坏了空调的闷热的实验室,还真是有点怀念。当时写这些文章并不是想作为教程,只是自己的总结方便日后温习,所以文章内容都很基础。 2015/08/04 于工学一号馆 1.基本的
Tencent JCoder
2018/07/02
1.2K0
AdaFit:一种对基于学习的点云法线估计方法的新思考(ICCV2021)
AdaFit: Rethinking Learning-based Normal Estimation on Point Clouds (2021-ICCV)
3D视觉工坊
2021/10/21
1.1K0
浅谈三维点云中的几何语义
本文介绍了点云中不可忽视的一项重要属性——几何语义,并尝试根据自己的理解和实践经验对其进行一些归纳总结,可能有些地方有理解有误,请大家抱着批判的态度学习。
3D视觉工坊
2021/03/19
1.2K0
浅谈三维点云中的几何语义
图形学入门(三):基础着色
在掌握了上一篇文章的知识之后,我们现在可以通过逐个绘制三角形面组合出一个模型了。但是我们现在绘制出来的结果看起来是一个色块,效果不太自然。在现实中,我们看到物体是因为这个物体反射了光线,而在这个过程中,根据物体形状以及与光线的相对位置关系,物体的表面总会呈现不同的明暗效果。这种明暗的变化使我们感觉这个物体是「立体的」。也就是说,我们更希望看到下图1中右侧的渲染效果而非左侧的渲染效果:
zhiruili
2021/08/10
1.6K0
图形学入门(三):基础着色
WebGL简易教程(十):光照
在上一篇教程《WebGL简易教程(九):综合实例:地形的绘制》中,实现了对一个地形场景的渲染。在这篇教程中,就给这个地形场景加上光照,让其更加真实,立体感更强。
charlee44
2019/10/15
1.3K2
WebGL简易教程(十):光照
计算机图形学整理
光在每个波长上的能量有多大,就得到了上图中的一条曲线,这个曲线就是谱分布。我们可以用这条曲线来刻画一些特有的光。
算法之名
2023/03/31
7420
计算机图形学整理
估计点云中的曲面法线
曲面法线是几何表面的重要属性,并且在诸如计算机图形应用的许多领域中被大量使用,应用在矫正光源产生的阴影和其他的视觉效果。 给定几何表面,通常用垂直于曲面的向量来推断曲面上某一点法线的方向是很简单的。然而,由于我们获取的点云数据集代表真实表面上的一组点样本,因此有两种方法: 利用曲面网格划分技术,从获取的点云数据集中获取潜在面,然后从网格中计算曲面法线 使用近似法直接从点云数据集中推断曲面法线 本教程将针对后者,即给定点云数据集,直接计算点云中每个点的曲面法线
点云PCL博主
2020/12/03
1.4K0
估计点云中的曲面法线
3D点云中高效的多分辨率平面分割方法
论文链接:https://www.researchgate.net/profile/Sven-Behnke-2/publication/221104985_Efficient_Multi-resolution_Plane_Segmentation_of_3D_Point_Clouds/links/0912f5012c7339e394000000/Efficient-Multi-resolution-Plane-Segmentation-of-3D-Point-Clouds.pdf
3D视觉工坊
2023/04/29
6960
3D点云中高效的多分辨率平面分割方法
点云ICP注册
两个点云要注册在一块,一般分两个步骤:先做一个大致的对齐,也就是所谓的初始注册,一般可以通过一些可靠的点对来计算得到(如图3所示);然后在初始注册的基础上进行精细注册,提升注册的精度(如图4所示)。精细注册的方法,一般采用ICP算法,也就是最近点迭代的方法。
NT4.4
2019/10/17
2.5K0
点云ICP注册
Unity可编程渲染管线系列(三)光照(单通道 正向渲染)
这是涵盖Unity可编写脚本的渲染管线的教程系列的第三部分。这次,我们将通过一个Drawcall为每个对象最多着色8个灯光来增加对漫反射光照的支持。
放牛的星星
2020/08/04
2.3K0
Unity可编程渲染管线系列(三)光照(单通道 正向渲染)
OpenGL光照学习以及OpenGL4环境
前言 最近稍有空闲,整理下之前学习光照的笔记,以及在配置OpenGL4环境过程中遇到的问题。 光照 1、模拟灯光 模拟灯光:通过GPU来计算场景中的几何图形投射和散发出来的光线。 本质是GPU对每个三角形的顶点单独计算灯光,然后把结果再顶点之间的片元中进行插值。 故而当要求一个更真实、更光滑的灯光时,需要增加大量的三角形,从而加大计算量。 在上述这种情况,可以把灯光效果预处理并烘焙到纹理中。(就是形成一个纹理) 2、光照计算 光源=环境光 + 漫反射光 + 镜面反射光。 在计算光照的过程中,需
落影
2018/04/27
1.4K0
OpenGL光照学习以及OpenGL4环境
opengl入门教程pdf[猎豹opengl快速入门]
概述OpenGLOpenGL是渲染2D、3D矢量图形硬件的一种软件接口。本质上说,它是一个3D图形和模型库,具有高度的可移植性,并且具有非常快的渲染速度。OpenGL并不是一种语言,而是更像一个C运行时函数库。它提供了一些预包装的功能,帮助开发人员编写功能强大的三维应用程序。OpenGL可以再多种操作系统平台上运行,例如各种版本的Windows、UNIX/Linux、MacOS和OS/...
Java架构师必看
2022/04/02
3.2K0
opengl入门教程pdf[猎豹opengl快速入门]
推荐阅读
相关推荐
CG-Assignment2
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文