normals_to_egi — REPRCONV direction op

• 数据种类:normals → image2d

• 调用: import fullseye as fs; fs.ledger.normals_to_egi(normals, n_az=36, n_el=18)(要直接调用实现,import reprconv; reprconv.normals_to_egi(normals, n_az=36, n_el=18);从台账取用则 opsreprconv.get("normals_to_egi"))

用法

法线 (N,3) → 扩展高斯像 (n_el, n_az) 的 image2d。

方向的 2-D 直方图(Horn, *Extended Gaussian Images*, Proc. IEEE 72(12) 1984)。是"哪个朝向的面有多少"的地图,在平面占主导的物体上会在 1 个 bin 中立起峰。不可逆 —— 舍弃 bin 宽度程度的方向分辨率。

舍弃的量可以测量: 最频 bin 的中心方向与输入平均方向的角度差就是量化误差, 默认 (36, 18) 下相对 bin 宽 10 度,实测为 3.7 度(由 selftest 给出)。

仰角的 bin 按 sin(el) 等分(等立体角)。若按度数等分,极点处会过度精细,立起"面集中在北极"这种虚假的峰。

★传入位置点云也不会抛异常。backends_typed.TYPE_TO_SORT 把 normals 折叠到 points,所以进化器和台账都不区分两者。本 op 只看方向(舍弃长度),所以传入 (N,3) 的坐标时, 会似是而非地返回"从原点看各点的朝向"的直方图。实测(2026-09-08,200 点的曲线 vs 全部朝正上方的法线): 非零 bin 只是 1 → 12、最大 bin 200 → 44 的变化,总和两者都是 200。"总和与点数一致所以正确"无法区分两者。设为 fullseye.set_system("extra_checks", "on") 时,偏离单位长度的向量会被拒绝(见下面的 Raises)。

Args:

normals: (N, 3)。

n_az: 方位角的 bin 数(默认 36 = 10 度步长)。

n_el: 仰角的 bin 数(默认 18)。

Returns:

(n_el, n_az) float64 的计数图(行 = 仰角,列 = 方位角)。

Raises:

ValueError: bin 数小于 1 / 超过上限 / 输入不正。

ValueError: extra_checks='on' 下,含有长度偏离 1 超过 1e-6 的

向量时(捕捉把位置点云当作法线传入的事故)。

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

• 算法的正典(作者、年份)与用途见上面的族使用指南。

可运行的示例(实际调用该算子并已验证的样例)

• representation_conversion — py -3.11 examples/representation_conversion.py

类型可衔接的下一个算子(可接受 image2d 作为输入)

keypoints_from_image2d

同类别(direction)

normals_to_angles · angles_to_normals


*Provenance: reprconv.py — REPRCONV 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.