Add chroma-guided alpha suppression for background holes
Pull alpha toward 0 in the unknown band where bg_confidence is high, so green that survives in hair gaps and hole pockets goes transparent (doc section 10). Runs between trimap enforcement and alpha cleanup; sure-foreground pixels are never touched, keyed by the bg_confidence we already compute. On the two samples this clears the faint outer green halo (edge pixels 19.3k -> 16.0k) but has little *visible* effect, because their residual is no longer green: it is magenta from the pymatting unmix on genuine semi-transparent hair (vis-magenta p95 ~0.07, identical pre/post despill), which this pass deliberately leaves alone. The magenta needs a separate colour fix. Knobs live in AlphaPostSettings (chroma_suppress*, default on). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@ from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .alpha_post import clean_alpha, enforce_trimap
|
||||
from .alpha_post import clean_alpha, enforce_trimap, suppress_alpha_by_chroma
|
||||
from .chroma import compute_bg_confidence
|
||||
from .despill import despill_green
|
||||
from .foreground import estimate_foreground_rgb
|
||||
@@ -71,6 +71,7 @@ def _run_image(
|
||||
alpha, alpha_source = pipeline._predict_alpha(rgb, trimap, bg_confidence)
|
||||
|
||||
alpha = enforce_trimap(alpha, trimap)
|
||||
alpha = suppress_alpha_by_chroma(alpha, bg_confidence, trimap, settings.alpha_post)
|
||||
alpha = clean_alpha(alpha, trimap, settings.alpha_post)
|
||||
foreground = estimate_foreground_rgb(
|
||||
rgb, alpha, bg_confidence, model, settings.foreground
|
||||
|
||||
Reference in New Issue
Block a user