Matlab 绘制法向量场3D

Matlab 绘制法向量场3D,matlab,3d,plot,Matlab,3d,Plot,我正在实现我已经从一组具有不同光照方向的图像计算法线的算法 如何在matlab中绘制法向量场?我有一个大小为(nx3)的法线矩阵。我怀疑您正在寻找。恐怕您遗漏了一步。需要从曲面法线检索深度贴图,然后才能开始打印。要了解如何做到这一点,您可以查看以下文章的第4节: 网络上还有其他资源;我不知道任何Matlab库中有任何内置函数,但我没有计算机视觉工具箱,所以谁知道呢?您需要将法线场表示为梯度场,然后可以使用quiver函数。在梯度场中,先前归一化的三重{pn,qn,rn},数据以这样的方式呈现,

我正在实现我已经从一组具有不同光照方向的图像计算法线的算法


如何在matlab中绘制法向量场?我有一个大小为(nx3)的法线矩阵。

我怀疑您正在寻找。

恐怕您遗漏了一步。需要从曲面法线检索深度贴图,然后才能开始打印。要了解如何做到这一点,您可以查看以下文章的第4节:


网络上还有其他资源;我不知道任何Matlab库中有任何内置函数,但我没有计算机视觉工具箱,所以谁知道呢?

您需要将法线场表示为梯度场,然后可以使用quiver函数。在梯度场中,先前归一化的三重{pn,qn,rn},数据以这样的方式呈现,使得它的第三分量总是等于一(至少在理论上)。我的意思是,对于rn=1,或者我现在应该说,现在:R=1,你们实际上只需要{P,Q}个协分量,就可以用普通的二维箭函数表示梯度场的内容。因此,梯度向量与法线场是完全不同的,因为:P=pn/sqrt(pn^2+qn^2+rn^2),Q=qn/(pn^2+qn^2+rn^2)是有意义的。 但是,您不必为双for循环、在X、Y方向上运行而烦恼,因为从法线对渐变场进行有点、正确渲染的计算如下:P=pn./(pn.^2+qn.^2+rn.^2)。^(1/2);,等等
您还可以看到:

您需要将法线场表示为渐变场,然后可以使用Matlab的quiver函数。在梯度场中,数据先前归一化的三重{pn,qn,rn}以这样的方式表示,使得它的第三分量始终等于一(至少在理论上)

我的意思是,对于rn=1,或者我现在应该说,对于:一些R=1,你实际上只需要{p,Q}个协成分,就可以用普通的二维箭函数表示梯度场的内容。因此,梯度向量与法线场完全不同,因为: P=pn/sqrt(pn^2+qn^2+rn^2),Q=qn/(pn^2+qn^2+rn^2)有针对性地说

但是,您不必使用double for循环,它将在X、Y方向上运行,因为从法线对渐变场进行了逐点、正确渲染的计算,如下所示:

p=pn./(pn.^2+qn.^2+rn.^2)。^(1/2),和:Q=qn./(pn.^2+qn.^2+rn.^2)

您还可以看到:

简单地说,渐变场始终表示X、Y方向上的坡度,同时沿Z轴在3D曲面上精确下降一个高度单位,例如使用光度立体算法检索。这就是为什么箭波函数可视化中的第三个分量总是等于一(即R=1),实际上是不相关的


上个月,我在Mathworks的网页上发布了一些最简单的光度立体声方法的代码,由于时间跨度的原因,我指的是我自己到目前为止在Matlab中生成的代码

但是对于quiver3,它要求一个点(x,y,z)和法线(u,v,w),但我只有法线的值。有什么建议吗?那你打算策划什么?如果你只有一组向量,你所能做的就是把它们画成某种点云,但这不是你想要的。每个法线都附着在某个物体上,一个曲面,一个多边形,一个像素,不管怎样,你需要确定的每个法线的原点就是你的xyz。实际上我试图解决的问题是通过光度立体重建曲面。因此,给定一组具有不同照明方向的图像,在某些假设下,我们可以恢复法线贴图,然后从法线贴图重建曲面。在尝试重建曲面之前,我想绘制法线贴图以查看曲面的大致外观。那么你的问题不是绘制,而是隐式曲面构造。在构建曲面之前,您无法绘制任何内容,曲面是您对quiver3的xyz输入。是的,问题是关于绘制,但这个问题意味着重构曲面,而我是这样做的,并且绘图相当直接。谢谢,我实际上计算了深度贴图,然后使用surf(深度贴图,反照率)来查看曲面