repose_angle_silhouette — DRIVE granular op

• Data kinds: image2d → table

• Call: import fullseye as fs; fs.ledger.repose_angle_silhouette(side, *, threshold: 'float' = 0.5, toe_frac: 'float' = 0.15, apex_frac: 'float' = 0.15, min_points: 'int' = 8, correct_ground: 'bool' = False, method: 'str' = 'edge') -> 'dict' (implementation को सीधे call करना हो तो import granular; granular.repose_angle_silhouette(side, *, threshold: 'float' = 0.5, toe_frac: 'float' = 0.15, apex_frac: 'float' = 0.15, min_points: 'int' = 8, correct_ground: 'bool' = False, method: 'str' = 'edge') -> 'dict', registry से लेना हो तो opsdrive.get("repose_angle_silhouette"))

उपयोग

side image (powder coverage) से angle of repose φ पढ़ता है —— बाएँ और दाएँ ढलानों पर अलग-अलग line fit करता है, तलहटी और शिखर को छोड़कर।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

手順(Sunday ほか 2020 §5.3 の作法を規則化): ①列ごとの粉面の高さ = 被覆率が threshold を切る縁の画素の位置 + その被覆率(副画素; method="edge"、既定)②地面 = 各列の最下の交差(同じ補間)→ measure.fit_line で地面の傾き β。method="column_sum" は被覆率の列和(縁が反エイリアスなら厳密な副画素だが、粉の画素値が 1 からずれると その比で tan φ がずれる: 一様雑音 ±0.1 を [0, 1] に切っただけで 0.62 度低く出た、実測) ③頂 = 高さの最大列 ④地面からの高さが toe_frac·H 以上・(1 − apex_frac)·H 以下の点だけを左右別々に fit_line(全最小二乗)⑤φ = 左右の平均。

• correct_ground: 基準面の傾き β を tan の引き算で外す(tan φ' = tan θ ∓ tan β; せん断型 datum の傾きに対して厳密)。カメラのロールなら角の引き算が正しく、両者は β = 5 度で 1 度以上違うので既定は外さない。左右の差 asymmetry_deg が大きいときだけ基準面を疑う。

• 返り: phi_deg, phi_left_deg, phi_right_deg, asymmetry_deg, ground_deg, height_px, base_px, apex_col, left_cols / right_cols(当てた列の範囲)、rms_left / rms_right(直線からの残差 [px])、n_left / n_right。

• Raises ValueError: 画像でない / 被覆率が [0, 1] の外 / 粉が写っていない / 山が画像の上・左・右の縁に触れている(切れている)/ 当てる点が min_points 未満(山が小さすぎる)/ toe_frac + apex_frac ≥ 1 / method の綴り違い。

分解能の目安(被覆率に一様雑音 ±0.1、4 角度 × 6 seed の実測): 山の幅 400 px で 0.007 度、50 px で 0.2 度、25 px で 0.6 度。

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_granular_heap_repose — py -3.11 examples/poc_granular_heap_repose.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

इसी category के (granular)

heap_volume_cone · heap_mass · heap_volume_heightmap · beverloo_rate · beverloo_fit · discharge_synth · dispense_mass_from_video · hopper_discharge_rate


*Provenance: granular.py — DRIVE operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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