contour_fourier_complex — SHAPE2D descriptor op

• 数据种类:pairs → matrix

• 调用: import fullseye as fs; fs.ledger.contour_fourier_complex(points, n_harmonics=None, parametrisation='index')(要直接调用实现,import fourierdesc; fourierdesc.contour_fourier_complex(points, n_harmonics=None, parametrisation='index');从台账取用则 opsshape2d.get("contour_fourier_complex"))

用法

将闭合轮廓转换为复傅里叶级数的系数 —— z(t) = Σ c_k exp(2πi k t)。

参数:

points: (N,2) 的闭合轮廓顶点。(row, col) 顺序(与 fourierdesc 相同)。

n_harmonics: 保留的阶数 K(|k| <= K)。为 None 时保留到可表示的上限。

parametrisation: "index" = 把点的下标作为等间隔的参数 /

"arclength" = 先按弧长等间隔重新采样再变换。

返回值: (2K+1, 3) 的实数组(matrix)。行为 [k, Re c_k, Im c_k], k 依次为 0, 1, -1, 2, -2, …(从低频开始)。

★不在默认值里悄悄决定参数的取法是本 op 的要点。对不均匀采样的轮廓用 "index" 读取时,点密集处会被分配多余的时间,图看起来相似,系数却是另一回事(实测中 k=3 的系数相差 47 倍)。默认是 "index"(FFT 的原始含义),但若用作形状的描述,请选择 "arclength"。

★★选择 "arclength" 时会在 op 内部重新采样轮廓,因此返回的系数描述的不是传入的数组,而是重新采样后的轮廓。因此 contour_fourier_truncation_energy 的预言「对重新采样后的轮廓」是严格的,调用方若用手头的数组测量误差就会对不上(实测: 512 点时偏差 1.15)。想要对手头数组严格成立的预言时,请先按弧长重新采样, 再以 "index" 调用。

★弧长重新采样不是幂等的: 由于用弦连接采样点,对已经等弧长的轮廓再做 1 次,点最多会移动 3.73 px(平均 0.84 px),长度还会再缩短 3.25 %。不要做两次。

详细使用指南

• shape_description_2d 族使用指南

参考(示例数据、文献)

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

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

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

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

• poc_one_stroke_epicycles — py -3.11 examples/poc_one_stroke_epicycles.py

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

contour_epicycle_chain · contour_fourier_truncation_energy

同类别(descriptor)

elliptic_fourier · reconstruct · invariants · normalize · descriptor_distance · fourier_smooth · from_xld · contour_epicycle_chain


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

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