产出真实小分辨率、颜色数受控、边缘硬朗的 sprite,而非马赛克滤镜。 纯 numpy/PIL 自研实现,无额外依赖、无需模型权重。 三种模式:按目标宽度 / 按像素块大小 / 自动检测网格。第三种专治 AI 生成的伪像素图(看着像素风,实际网格歪斜、边缘抗锯齿、上千颜色)。 选型说明:Pixel Snapper(MIT)解决的是「伪像素图 → 完美像素图」, 而「普通图 → 像素画」是另一个问题,核心在降采样与调色板量化, 故两条路都做进同一节点。 网格检测处理了两类经典误判: - 谐波(八度)错误:取得最高分后回查真约数(octave killer) - 内容周期冒充像素周期:把最佳/最差相位的分差并入评分(anti-phase) 评分用单元内方差而非相邻差分——差分对模糊极敏感,实测会把 4 像素 网格判成 24~28;组内方差则天然压制过大的 s。 实测:干净放大图 k=2~16 共 27/27 全对零八度错误;非方形网格与相位 偏移全对;普通插画正确判为未检出;端到端把 32×32 放大 10 倍加模糊 噪点的图还原回 32×32,与真值 MAE 0.0049;整数倍放大为纯复制无插值。 调色板在 CIELAB 空间聚类(RGB 距离与人眼感受相差很远,会丢暗部层次), 降采样默认主导色(均值会造出新颜色并糊边),内置 PICO-8/Game Boy 等 可确认取值的复古调色板。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
24 lines
890 B
Python
24 lines
890 B
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
像素化算法(Ruinode 自研,纯 numpy/PIL 实现)
|
|
=============================================
|
|
面向像素游戏资产制作,而非「马赛克滤镜」:产出的是真实小分辨率、
|
|
颜色数受控、边缘硬朗、可直接用作 sprite 的图。
|
|
|
|
- grid 像素网格检测(含八度/内容周期两类误判的对策)与按网格降采样
|
|
- quantize CIELAB 空间的调色板生成、颜色映射与四种抖动
|
|
- palettes 内置复古调色板
|
|
"""
|
|
# ruff: noqa: F401
|
|
|
|
from .grid import detect_grid, downsample_grid
|
|
from .palettes import PALETTES, PALETTE_NAMES
|
|
from .quantize import (apply_palette, kmeans_palette, median_cut_palette,
|
|
rgb_to_lab)
|
|
|
|
__all__ = [
|
|
"detect_grid", "downsample_grid",
|
|
"kmeans_palette", "median_cut_palette", "apply_palette", "rgb_to_lab",
|
|
"PALETTES", "PALETTE_NAMES",
|
|
]
|