typed op• Data kinds: points → volume
• Call: fullseye.apply(img, "tb_points_to_voxel", a=0.5, b=0.5) (2-D model = एक image + दो scalar knobs a,b∈[0,1])

*Figure synthetic 128×128 input पर सच में चलाकर मिला output है। बाईं ओर input, दाईं ओर output। Point clouds ऊपर से देखे गए scatter के रूप में (brightness = z), 1-D series line के रूप में, volumes z दिशा में maximum-intensity projection के रूप में, videos बीच के frame के रूप में, complex images amplitude के रूप में, और जो return values चित्र नहीं बन सकते वे स्वयं values के रूप में दिखाए जाते हैं।*
*Knob a output नहीं बदलता (मापा गया: 0.1 / 0.5 / 0.9 पर एक जैसा)।*
*Knob b output नहीं बदलता (मापा गया: 0.1 / 0.5 / 0.9 पर एक जैसा)।*
Stages (पहले आने वाले ops → यह op, बाएँ से क्रम में):
▸ tb_points_to_voxel: stages का figure (docs site)
दूसरी images पर भी (synthetic scene / photo / coins। ऊपर की row में inputs, नीचे की row में उनके outputs। Knobs default पर):
▸ tb_points_to_voxel: दूसरी images पर output (docs site)
Motion (GIF: frames / views / slices क्रम से। स्थिर figure ही पूरा रूप है, GIF सहायक है):

Point cloud (N,3) → density voxel (size³)। scatter_add से splat, और वैकल्पिक (optional) Gaussian smoothing।
bounds=(lo,hi) देने पर कई clouds को एक ही grid पर रखा जा सकता है (= matching की पूर्व-शर्त)।
प्रक्रिया: हर point को idx = floor((p − lo)/(hi − lo)·(size − 1)) से integer grid पर डाला जाता है, और उस voxel में 1 जोड़ा जाता है (value = उस voxel में गिरे points की संख्या)। smooth > 0 हो तो σ=smooth (voxel units में) वाला gaussian 3 axes पर separable conv के रूप में लगाया जाता है (radius max(1, int(4σ + 0.5)), किनारे replicate)। output का axis order points के columns का क्रम ही है (points[:, 0] → axis 0), और (depth,row,col) में क्रम बदला नहीं जाता।
• bounds: (lo, hi) के 2 vectors, हर एक 3 dimensions का। None हो तो point cloud का अपना min/max (हर cloud के लिए
grid बदल जाता है, इसलिए 2 clouds की तुलना करते समय हमेशा वही bounds दें)। length 3 न हो, non-finite हो, या किसी axis पर hi <= lo हो तो ValueError (tsdf वाला ((xmin,xmax),...) तरीका length 2 मानकर reject होता है)।
• range से बाहर के points हटाए नहीं जाते, बल्कि किनारे के voxel पर clip होते हैं (किनारों पर झूठी density जमा होती है)। उन्हें काटना हो
तो पहले ही point cloud की तरफ़ से हटा दें।
• size: हर side में voxels की संख्या। जिस axis पर hi − lo 0 हो, उसे बस 1e-9 से बदल दिया जाता है, कोई warning नहीं।
• खाली point cloud और bounds=None पर numpy का min exception देता है।
• return value: (size, size, size) float64 numpy (device पर compute हो तब भी CPU पर लौटाया जाता है)। values counts हैं
(smoothing के बाद counts का weighted distribution), normalize नहीं की जातीं।
आगे: match_points_ncc / signed_distance_field / voxel_to_mesh के input के रूप में।
2-D evolution registry में bridge किया गया 3d op points_to_voxel। implementation वही है, केवल calling convention को op(v, a, b) के अनुसार ढाला गया है। इस op में कोई tuning point नहीं है; न a उपयोग होता है, न b।
• 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 के स्रोत।
नीचे का program सच में चलता है, यह जाँचा गया है (figure वाला ही input)। Studio की help में यह block buttons बन जाता है, जिनसे इसे वहीं load करके चलाया जा सकता है।
img_to_points 0.50 0.50 tb_points_to_voxel 0.50 0.50
▸ यह pipeline load करें · Load करके चलाएँ
नीचे के उदाहरण मूल ledger op points_to_voxel को call करते हैं। यह bridge op वही implementation है, बस fn(v, a, b) convention के अनुसार ढाला गया है, इसलिए व्यवहार वैसा ही लागू होता है (केवल call का रूप अलग है)।
• sh_descriptor_retrieval — py -3.11 examples_3d/sh_descriptor_retrieval.py
• shape_desc_pose — py -3.11 examples_3d/shape_desc_pose.py
volume को input के रूप में लेते हैं)identity · vol_gaussian · vol_median · vol_erode · vol_dilate · vol_threshold · vol_reg_dilate · vol_reg_erode
typed)tb_estimate_point_normals · tb_iss_keypoints · tb_project_points · tb_render_point_depth · tb_statistical_outlier_removal · tb_radius_outlier_removal · tb_voxel_grid_downsample · tb_mls_smooth
*Provenance: ops.py — 2D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.