Skip to content

fix(matte): 键控杀伤半径按底噪推导 - #369

Merged
minorcell merged 1 commit into
1024XEngineer:mainfrom
johnnyzhang-eng:fix/matte-keys-through-light-subject
Aug 18, 2026
Merged

fix(matte): 键控杀伤半径按底噪推导#369
minorcell merged 1 commit into
1024XEngineer:mainfrom
johnnyzhang-eng:fix/matte-keys-through-light-subject

Conversation

@johnnyzhang-eng

Copy link
Copy Markdown
Contributor

Summary

键控清理的杀伤半径由固定常数 38 改为按四角实测的底色噪声推导(下限 6、上限 24、系数 4×σ)。

_flat_bg_penalty 是乘性惩罚、作用于全图,不区分主体内外:与底色距离小于半径的像素直接归零,半径到半径+14 之间线性变半透明。半径 38 远超真空隙需要的宽度,于是把与底色接近的主体内部像素一起削掉——浅色角色正好落在这个窗口里,深色角色距离 300 以上永远不沾。

要清掉的是被主体围住的那块底色本身,它与四角同源、差异只来自压缩噪声,量级由四角离散度直接给出。固定常数没有这个信息。

Closes #365

实测:五个真实角色母版

主体判据用 u2netp 的真实掩码(_predict_mask 输出 > 0.7),不是按颜色距离反推——否则就是拿被测量的性质去定义被测对象。

角色母版 主体像素 旧(阈值 38)受损 新(噪声推导)受损
美少女 · 人形三渲二 319,262 34.42% 3.55%
角色 · 钟表匠 145,473 10.17% 0.48%
仙月 · 三渲二 343,552 6.10% 0.77%
角色 · 深海打捞员 132,428 1.64% 0.25%
Cinder 烬 · 像素法师 181,512 0.72% 0.15%

受损 = 主体区里被全杀或被削成半透明的像素占比。半透明那一档更隐蔽:角色没被挖空但整体发虚,落在过渡带里不产生任何异常。

清理能力没有回退

合成用例覆盖被主体围住的底色空隙(这是本函数存在的理由——u2netp 对闭合区域失灵,四足腿间的背景会被当成主体内部整块留下):

场景 半径 空隙被清
干净底 + 浅色主体 6.0 320/320
干净底 + 深色主体 6.0 320/320
轻噪底 σ=3 12.1 320/320

噪声底自动把半径放宽到 12.1,仍然清得掉。

不包含

  • u2netp 换 u2net 全量版(分割质量本身弱,另一条线)
  • 底色非纯色时两层清理同时跳过导致的抠不干净(相反方向的另一个缺陷)

Test plan

  • uv run ruff check . → All checks passed
  • uv run lint-imports → 2 kept, 0 broken
  • uv run python -m scripts.export_openapi && git diff --exit-code -- ../openapi.json → 无漂移
  • uv run pytest -q → 737 passed, 14 skipped
  • 四种浅色主体组合断言零像素受损;深色主体行为不变
  • 闭合空隙在干净底与噪声底上均仍被清掉
  • 半径随底噪变化,干净底取下限

@vercel

vercel Bot commented Aug 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
windup Ignored Ignored Preview Aug 18, 2026 3:39am

@codecov

codecov Bot commented Aug 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查了自适应杀伤半径、全图乘性惩罚、闭合空隙清理及新增合成测试。干净底上的修复方向有效,但当前半径扩张在现有平坦度守卫允许的中等噪声背景上,仍会让骨白主体整体变成半透明,详见行内。使用生产函数对 σ≈4/6 的背景做了最小复现;两个修改文件均通过 py_compile。运行环境未提供 uv,因此未执行仓库完整 pytest。

Comment thread backend/packages/framework/src/windup_framework/providers/matte.py

@minorcell minorcell left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@minorcell
minorcell merged commit 0319409 into 1024XEngineer:main Aug 18, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(matte): 键控清理抠穿浅色角色本体

2 participants