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.