Refactor depth reference handling and cleanup
- Unified reference depth calculation to use a single implementation in common/depth.py. - Removed server-side reference depth computation and adjusted depth.json to only include image_size and intrinsics. - Updated depth texture handling to ignore transparent, invalid, and non-positive pixels when calculating reference depth. - Changed reference depth calculation to use the 95th percentile of valid depth values. - Adjusted depth direction fitting to return a flat direction when no samples are available. - Removed cleanup threshold parameters from Cutout and related nodes, simplifying the interface. - Updated tests to verify new reference depth logic and ensure compatibility with existing functionality.
This commit is contained in:
@@ -464,7 +464,6 @@ def boundary_vertices_from_faces(vertex_count, faces):
|
||||
|
||||
|
||||
CUTOUT_ALPHA_THRESHOLD = 0.9
|
||||
CUTOUT_CLEANUP_UI_SCALE = 100.0
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@@ -532,17 +531,6 @@ def world_plane_metric(matrix_world):
|
||||
return ((x.dot(x), x.dot(y)), (x.dot(y), y.dot(y))), z.length
|
||||
|
||||
|
||||
def cutout_cleanup_value(spacing, world_metric):
|
||||
import numpy as np
|
||||
|
||||
if spacing <= 0.0:
|
||||
raise ValueError("Cutout point spacing must be greater than zero")
|
||||
area_scale = abs(float(np.linalg.det(metric_transform(world_metric))))
|
||||
if area_scale <= 1e-12:
|
||||
raise ValueError("The Image Empty has a degenerate world transform")
|
||||
return CUTOUT_CLEANUP_UI_SCALE * float(spacing) ** 2 / area_scale
|
||||
|
||||
|
||||
def counter_clockwise_faces(points, faces):
|
||||
import numpy as np
|
||||
|
||||
@@ -620,27 +608,13 @@ def effective_cutout_edge_length(
|
||||
)
|
||||
|
||||
|
||||
def selection_calibration(
|
||||
content_values, target_shape, threshold=CUTOUT_ALPHA_THRESHOLD
|
||||
):
|
||||
"""Return Cutout validity and transparency ratio at geometry resolution."""
|
||||
def build_reference_mask(content_values, image_size):
|
||||
"""Resample Cutout content into a boolean mask at Depth texture resolution."""
|
||||
import numpy as np
|
||||
|
||||
values = np.asarray(content_values, dtype=np.float32)
|
||||
target_height, target_width = (int(value) for value in target_shape)
|
||||
source_height, source_width = values.shape
|
||||
y = np.minimum(
|
||||
(np.arange(target_height) * source_height / target_height).astype(np.int64),
|
||||
source_height - 1,
|
||||
)
|
||||
x = np.minimum(
|
||||
(np.arange(target_width) * source_width / target_width).astype(np.int64),
|
||||
source_width - 1,
|
||||
)
|
||||
resized = values[y[:, None], x[None, :]]
|
||||
valid = (resized > 0.0) & (resized >= float(threshold))
|
||||
transparent_fraction = float(np.count_nonzero(~valid) / valid.size)
|
||||
return valid, transparent_fraction
|
||||
target_width, target_height = (int(value) for value in image_size)
|
||||
return _resize_values(values, (target_width, target_height)) > 0.5
|
||||
|
||||
|
||||
def build_base_shape(
|
||||
|
||||
Reference in New Issue
Block a user