我正在尝试将表面法线量化为8个分档。
例如,当计算像HOG这样的特征来将2D渐变量[x,y]
量化为8个区间时,我们只需采用y平面的角度,即arctan(y/x)
,这将给出0之间的角度-360。
我的问题是,给定3D方向[x,y,z]
,在这种情况下表面法线,我们如何以类似的方式对其进行直方图?我们只是投射到一个平面并使用该角度,例如[x,y,z]
和[0,1,0]
的点积?
由于
编辑
我最近还读了paper,他们通过测量正常和预计算矢量之间的角度来量化表面法线,这些矢量围绕一个正圆锥形排列。我在问题(第3.3.2节最后一段)中添加了本文的链接,这是一种有效的方法吗?如果是这样,我们如何计算这些向量?
答案 0 :(得分:3)
对连续拓扑空间进行量化对应于对其进行分区并为每个分区分配标签。这种情况的直接标准方法(量化法线)如下。
将这种方法倾向于其他人建议的映射到球坐标然后对其进行分级的方法。这种方法在球体两极附近的灵敏度过高。
在您添加到问题中的论文中,正在使用相同的想法。然而,在那里,法线仅限于半球 - 图像中直接可见的唯一表面的表面法线距离从表面到视点的矢量不超过90度。
本文希望将这些表面法线量化为8个值,由8位整数表示,其中一位设置为1,其余设置为0. 8个预先计算的法线计算如下:
n t x = cos(a)* cos(t)
n t y = cos(a)* sin(t)
n t z = sin(a)
其中a = pi / 4且t = 0,pi / 4,2 * pi / 4,3 * pi / 4,...,7 * pi / 4.
注意
[cos(a)* cos(t)] 2 + [cos(a)* sin(t)] 2 + [sin(a)] < sup> 2 = cos 2 (a)[cos 2 (t)+ sin 2 (t)] + sin < sup> 2 (a)= cos 2 (a)+ sin 2 (a)= 1
答案 1 :(得分:1)
给定3D方向[x,y,z],在这种情况下表面法线,怎么可以 我们用类似的方式对它进行直方图编码?
在第一种情况下,您量化渐变的极坐标theta
。现在,您需要在2D直方图中量化球面方向theta
和phi
。
我们只是投射到一个平面并使用该角度
球体的分级决定了如何汇总信息以构建紧凑但描述性的直方图。
投射正常情况不是一个好主意,如果theta
比phi
更重要,只需使用更多投放箱theta
修改强>
蒂莫西·希尔兹在他的评论和答案中指出,theta
和phi
的定期分组不会产生对球体的定期分级,因为这些分区将朝向两极聚集。
他的回答给出了解决方案。或者,此处描述的非常规分箱可以黑客攻击,如下所示:
Phi
会定期在[0,pi]
量化。对于theta
,而不是量化范围[0,pi]
,而是量化范围[-1,1]
;
对于u
中的每个量化值[-1,1]
,theta
计算为
theta = arcsin(sqrt(1 - u * u)) * sign(u)
如果sign(u)
为否定,则 -1
会返回u
,否则会返回1
。
计算出的theta
和phi
会在球体上产生常规量化。
要了解上面给出的等式,请查看此article。它描述了随机抽样背景下的情况。
修改强>
在上面的黑客中,蒂莫西·希尔兹指出只考虑垃圾箱的区域。由于极点奇异性,顶点的价数(相邻区间的交点)不会是规则的。
对于之前的黑客行为的破解是将垃圾箱重新定为常规quadrilateral mesh并保留常规区域。
利用具有相同效价和面积的全局约束优化此问题的启发式方法可以从Integer-Grid Maps Quad Meshing获得启发。
对于两个黑客,这个答案太 hacky 而且与Timothy Shields的回答相比有点脱离背景。
答案 2 :(得分:0)
3维法线不能像2-D法线那样容易量化为1-D阵列(例如,使用arctan)。我建议将其直方图编码为具有极角和方位角的2维空间。例如,使用spherical coordinates,其中r(半径)值始终为1.0(因为表面法线标准化,长度为1.0)。在这种情况下,您可以丢弃r值并使用极角θ(θ)和方位角φ(phi)来量化3D法线。