人脸识别增强的 LowPoly 图像风格化(其三):从采样到受约束的图像重建


2022 年的第一篇,主要解决怎样在 Web 环境里把边缘检测、人脸特征点和三角化串起来。2023 年的第二篇,引入超像素,改善空白区域的取点与三角形着色。

后来,这套实验进入了 OpenFiles。输入从少量精心挑选的图片,变成了风景、合照、侧脸、舞台灯光、透明图片,以及文件处理工作流里的各种中间结果。原来一句“把这些点交给 Delaunay”就能略过的问题,逐渐变成了实现中最复杂的部分。

现在这套算法更适合这样描述:用图像边缘和经过确认的语义信息建立约束,在约束内分配有限的几何细节,再根据原图修正网格与颜色。 人脸检测仍然重要,但它已经只是整个系统的一种信息来源。

本文以 OpenFiles 3.2026.1008(2026 年 10 月 8 日发布)的 LowPoly 功能为参照,文中的“当前版本”与“已实现”均指这一版本。版本信息可查阅发布说明。论文部分来自可查的一手论文、作者项目页或出版记录;改进建议则明确作为后续工作。本文没有复现所有论文,不给出跨论文的性能排名。

先修正前两篇里的几个说法

首先,“人脸识别”在这里更准确的名字是人脸检测与特征点定位。我们需要知道眼睛、鼻子、嘴和脸部轮廓在哪里,没有判断人物身份。

其次,前文把 Gai 与 Wang 的方法概括为“Voronoi-based”,并与 Delaunay 三角化对立起来,这不准确。论文先用 Voronoi/CVT 迭代优化顶点,第 4.5 节最终使用的仍然是约束 Delaunay 三角化。前者决定点怎样移动,后者决定点怎样连接,可以出现在同一条管线里。该文 2015 年在线发表,正式卷期是 2016 年;前文链接的 Zhang 等人的文章是 IWSSIP 2015 会议论文,Gai 与 Wang 的文章是期刊论文,不宜直接称为“硕士论文”和“博士论文”。论文原文、正式出版信息、Zhang 等人的出版记录。

还有两个判断需要收回适用范围。“Web 下只能使用传统方法”描述的是当时我掌握的工具和约束;现在 OpenFiles 已经使用本地打包的 MediaPipe 模型。“已经达到 Web 技术的极限”“与论文不相上下甚至更好”,则只是当时对少数示例的主观判断。没有统一图片、面数、参数、硬件和评价方法,这些判断不能当作实验结论。

LowPoly 究竟在优化什么

三角形越多,通常越容易贴近原图。但无限增加三角形,最后得到的可能只是另一种像素表示,LowPoly 的概括能力反而越来越弱。

我现在把这个任务拆成四个彼此牵制的目标:

  • 结构保真:地平线不能断,眼睑不能变形,手指不能融进背景。
  • 色彩保真:阴影、高光和材质分界不能被错误混色抹掉。
  • 几何与风格:三角形的大小、方向和疏密有组织,细节服务于主体,而不是追踪所有噪声。
  • 计算成本:处理时间、内存、输出体积和界面响应都可接受。

可以用下面的式子整理这些目标:

min⁡V,T,CEimage+λsEstructure+λqEquality+λn∣T∣\min_{V,T,C}\quad E_{\mathrm{image}} + \lambda_s E_{\mathrm{structure}} + \lambda_q E_{\mathrm{quality}} + \lambda_n |T|

其中 VV 是顶点,TT 是三角形连接关系,CC 是面片颜色;还可以要求指定轮廓保留在网格里,限制面数或运行时间。这是理解问题的概念模型,当前 OpenFiles 并没有联合求解这个完整目标函数。 它使用一系列有局部预算和保护条件的启发式步骤。

这一区别很重要:一条规则改善了某个局部问题,并不意味着整张图的误差、面数和艺术效果都同时变好。

与旧博客相比,主干变了什么

环节第一篇,2022第二篇,2023当前 OpenFiles
输入尺度统一缩小到指定范围延续归一化按短边上限处理,小图不放大;几何与着色共享分析分辨率
轮廓Edge Drawing、分段与 RDP 简化延续亮度与色度支持、语义加权、分组预算、弱长边与细小结构补偿
内部取点与图像无关的随机补点全图 SLIC 中心点连续间距场、确定性序列、局部细节预留、受约束松弛
人脸模型输出点集,二次采样待完善与其他点合并多尺度搜索、严格复核、去重;按眼、鼻、嘴的特点安排约束和采样
身体TODO后续方向人像分割、姿态引导的身体分区、手部与衣物边界支持
三角化普通 Delaunay普通 DelaunayDelaunator 加约束恢复;先处理交点与共线点,再保护轮廓
网格优化主要依赖初始取点超像素改善分布删除拥挤自由点、特征流加权 CVT、局部补点、图像误差驱动翻边
着色重心附近取色顶点与中心所在超像素加权面积积分、亮度分位截尾、语义限制、细节例外、局部肤色协调
执行页面内实验页面内实验推理与网格两个 Worker、取消、缓存、统一工作流入口

这里最容易误读的是超像素:当前主流程已不再使用全图 SLIC 中心取点。它会在人脸局部和身体语义区域运行 SNIC,并按“超像素编号 × 语义标签”分别统计颜色。SNIC 是区域引导的一部分,最终面片颜色仍直接来自分析图像。

当前管线:先找结构,再决定怎样抽象

下面省略了若干局部修正步骤,但保留了主要的数据依赖。实际实现中,轮廓会分阶段加入,三角化也会随着松弛、删点和补点重复执行。

1. 归一化同时约束几何和颜色

分析尺寸控制处理图像的短边上限,默认 2048,配置范围为 512—2048。将这一上限记为 LL,缩放因子是:

s=min⁡(1,Lmin⁡(W,H))s = \min\left(1,\frac{L}{\min(W,H)}\right)

因此,6000×4000 的输入默认变为 3072×2048;512×512 的输入仍然是 512×512。它不是“最长边最大 2048”。

人脸几何、边缘检测、网格和最终取色共享这张分析图。SVG 可以继续放大,但放大不会恢复分析前被缩掉的细节。文中后续说的“原图取色”,具体指未经边缘增强的分析像素,不保证是磁盘文件的全分辨率像素;调用者在进入 LowPoly 前也可能已经缩放输入。

实现还为像素读取准备了 CPU Canvas,减少 GPU/CPU 读回对半透明 RGB 舍入的影响。主线程参考路径与 Worker 路径调用同一个生成函数,这让确定性比较有了明确基础。

2. 模型输出先经过确认,再成为几何证据

当前使用 MediaPipe Tasks Vision 的 FaceLandmarker、ImageSegmenter 和 PoseLandmarker,模型随应用打包,配置为 CPU 推理。最多接受 8 张人脸,姿态检测最多返回 4 个人体。这些是当前实现边界,并不是对任意合照都能完整恢复的承诺。

检测流程已经不只是整图调用一次模型。它会根据情况组合整图、裁剪、镜像、旋转和语义候选区搜索,然后用更严格的局部检测、尺度一致性和分割支持复核结果。检测到一个大脸,也不能据此停止寻找背景里的小脸。

这些步骤主要针对两个相反的问题:

  • 远处、倾斜、部分遮挡的脸,在整图推理里容易丢失。
  • 放大裁剪后,花朵、灯具、耳朵或一块皮肤,可能被模型错误拟合成一张脸。

所以“检测成功”不能只看有没有输出点。候选必须仍然对应原来那个人,不能在复核时跳到附近另一张脸;同一张脸的不同裁剪结果还要合并。

当没有可靠人脸点,但语义和局部复核支持那里存在头部时,算法可以保留一个头部候选区域。它提高局部取点与误差细化的优先级,不会凭空放置一套眼鼻嘴曲线。这类候选区域也不计入确认的人脸数。

身体分割也采用类似分工:模型提供头发、皮肤、衣物等区域;姿态骨架作为种子,在皮肤和衣物内部做带图像代价的分区。推断出的身体部位标签用来引导优先级,精确边界仍主要由像素证据提供。它目前也没有单独调用 HandLandmarker 去恢复完整手指关键点。

3. 边缘从“有多少”变成“哪些值得保留”

Edge Drawing 仍是轮廓提取的基础。它从梯度锚点出发追踪连续像素链,比只得到一张二值边缘图更方便后续简化与建立约束。Topal 与 Akinlar,2012。

当前版本在旧实现上加了几层处理。

锚点沿切向采样。 旧式二维等距格点可能刚好错过一整条水平线的梯度峰值。现在水平边沿水平方向抽样、垂直边沿垂直方向抽样,同时保留原有锚点优先级。这对地平线、墙边和台阶很重要。

边界不仅来自亮度。 两种颜色可能亮度相近,灰度边缘却很弱。当前同时构造近似对立色通道,融合有效梯度;在有皮肤或手部语义支持的位置提高响应,避免浅色手指被背景阴影盖过。

先抑制纹理,再补弱结构。 双边滤波降低小尺度噪声;可选的 CLAHE 与轻微锐化只生成补充候选。增强后的曲线独立提取,再检查原亮度证据和已有覆盖范围,不拿增强图替换最终取色图。

轮廓竞争预算。 长度、对比度、连贯性和语义支持共同影响排序。手指等短曲线、衣物、头部、强结构边、低对比但连续的长直边,各有有限的补充名额。预算先考虑定义形状的拐点,再细分长直段,避免一条长边吞掉所有采样点。

这仍然是启发式筛选。它能解释为什么一段低对比地平线应当留下,也留下了一个后续问题:多组独立预算相加,是否还能保证整张图足够简洁?

4. 从点约束走到边约束

普通 Delaunay 只知道点的位置,不知道“这两个点之间必须保留眼睑”。即使一条轮廓上已经放了很多点,三角形仍可能跨过它。

当前用 Delaunator 创建初始网格,再通过 Constrainautor 恢复指定约束边。进入约束三角化之前,还要做以下处理:

  1. 对相交轮廓添加交点。
  2. 在共线顶点处拆分线段。
  3. 合并重复边,对结构线的近邻端点和接头适度吸附。
  4. 固定轮廓端点、解剖特征锚点和必要的画面边界。

这是当前版本最实质性的变化之一。轮廓不再只是提高局部点密度的提示,而是影响网格连接关系的约束。

但有约束也不意味着每个三角形都漂亮。密集交点、细窄结构和近邻平行线会制造小角度面片。尤其眼睛内部的小面片有时是必要细节,不能为了追求最小角度,直接把它们删除。

5. 自适应采样、CVT 松弛与局部细化

当前内部取点由连续的间距函数 h(p)h(p) 控制:平坦背景可以稀疏,人脸及其周围逐渐加密,有明显结构变化的区域适当加密。人脸尺寸也参与局部尺度计算,避免小脸被全图统一间距吞掉。它是人脸与图像对比度引导,不是通用显著目标检测器。

候选位置来自以 2、3 为基的确定性低差异序列,再根据局部间距拒绝过密点。相比逐行扫描,这样不会在达到预算时只照顾上半张图;相比无种子的随机取点,结果也更容易复现。

接着删除拥挤自由点,并做受约束的 CVT/Lloyd 类松弛。实现把轮廓距离场放在最长边不超过 256 的粗网格上,以间距和周期性距离权重引导点分布;自由点移动要避开碰撞与跨越约束。它借鉴了特征流引导的思路,但权重、栅格近似和质量筛选都有自己的实现,不是对 Gai 与 Wang 论文逐行复现。

初始网格之后,还会继续处理难以靠均匀采样保住的结构:

  • 轮廓两侧和细长色带,防止一条线两边直接连成巨大面片。
  • 针状扇形网格,在重建结果通过局部质量检查后才接受补点。
  • 紧凑明暗特征,如小孔洞、暗点和局部高光。
  • 高颜色误差的面片,在内部寻找有支持的梯度位置再补点。
  • 低对比、失焦区域,用更柔和的采样补足可见的明暗结构。

这些步骤使算法具有“先重建,再检查哪里没解释好”的性质。不过它目前更擅长补点,还没有一个统一的最终面数目标。

6. 五官不仅需要轮廓,还需要内部色块

给眼睛画一个闭合边界,不能自动保住瞳孔和眼白;给嘴唇加一圈点,也不能保住唇缝与下唇高光。

当前人像处理已经细化到不同部位:虹膜弧线裁剪在可见眼睑内,眼周加入稀疏过渡点,避免小眼睑边直接向远处皮肤拉出长扇形;鼻尖与鼻翼采用有限的局部采样,压制毛孔和头发纹理侵占预算;鼻孔暗点和嘴唇明暗各自获得补充机会。

面部投影和高光也不能完全交给模型点。算法会从真实边缘中保留部分面部光照分界,让后续颜色平滑不能跨越明显阴影。

这里体现的是一个反复遇到的经验:模型告诉我们那里大概是什么,像素告诉我们这张照片里它实际长什么样。 可靠的解剖信息和真实的遮挡、光照需要共同参与,而不是让其中一方无条件覆盖另一方。

7. 最终颜色来自整个面片

旧文的顶点与中心加权取色,已经替换为扫描线面积积分:遍历面片内的像素中心,半开区间避免共享边界重复计数;用 alpha 加权累计颜色,避免透明像素里不可见的 RGB 污染结果。没有覆盖像素中心的亚像素面片,再退回有限采样。

普通面片还会做稳健取色。默认按亮度排序后去掉两端各 40%,保留中间 20%。Gai 与 Wang 的第 4.6 节确实写出了使用 Lab 明度中间 40%—60% 区间的做法,前文说这一步“没有具体实现”并不妥当。OpenFiles 用 4096 档线性亮度直方图近似明度排序,省去逐面片排序所有像素的代价。原论文第 4.6 节。

但鼻孔、眼睛和高光本来就可能是少数极暗或极亮像素,不能统一当作离群值删掉。因此,细节面片保留面积均值;有足够占比的语义区域时,普通面片优先在相同语义标签内统计。这里的线性亮度用于排序,最终 RGB 累计仍在编码后的 RGB 数值上进行,并不是完整的线性光空间积分。

之后的肤色协调只发生在同一语义区域、色差有限、没有跨越约束的相邻面片之间,眼、唇等细节保持独立。默认关闭随机色彩变化,并对风格化造成的颜色位移设限。这个位移限制不能泛化为全图误差保证,尤其默认基准已经是截尾颜色,而非普通最小二乘意义下的均值。

还有一步与颜色紧密相关:网格拟合会在不动约束边的前提下尝试局部翻边。只有凸性、三角形质量和采样颜色误差都满足条件才接受,当前最多做两轮。翻边之后的最终网格也不必继续满足原来的纯 Delaunay 条件。它是有限的图像适配,不是全局最优或严格误差有界的重网格算法。

SVG 输出最后先画不透明面片的接缝底层,再画精确填充层,避免后绘制的描边盖住眼睛等微小面片。因而 SVG 元素数可能接近几何三角形数的两倍,不能拿 <polygon> 的数量直接当作网格面数。

从演示到桌面工具,性能问题也换了一个层次

过去关注某个循环是否少做一次平方根,现在还要关心一次任务在界面、模型和内存之间怎样流动。

当前有两个可复用 Worker:一个串行执行模型推理,另一个执行 OpenCV、网格与颜色管线。网格任务开始时传递像素缓冲,排队中的任务不提前复制整幅像素;取消当前任务会终止相应 Worker,后续可重新创建。两类 Worker 都会在空闲约一分钟后释放运行时。

缓存也分成两层:主体分析按来源、尺寸和身体分割配置复用;完整 SVG 按来源和规范化参数复用,最多保留两组结果,并按字符串存储估算限制在 16 MiB 内。工作流中的 Canvas 会原地改变,不能把 Canvas 对象身份当作内容缓存键。

在算法内部,空间索引用来缩小轮廓相交与邻近查询范围;稀疏位图跳过无待处理翻边的区域;颜色直方图只清理和遍历占用档位;重复的局部平滑采样可以复用。OpenCV Mat、Canvas、ImageBitmap 和对象 URL 则按生命周期释放。

这些优化分别作用于查询次数、数据搬运、重复计算和交互响应,不能合并成一个未经测量的“加速倍数”。Worker 让计算更少阻塞界面,不等于总计算时间自动缩短。 目前仅调整着色参数时,若完整结果缓存未命中,仍可能重新执行网格计算,阶段缓存还有空间。

独立转换器与文件处理工作流共用这条处理管线。第二篇设想的可组合图像处理流程,因而已经在产品中有了具体入口。

三张当前样例:结果之外,也看代价

为观察实际效果与计算代价,我基于 OpenFiles 3.2026.1008 的 LowPoly 实现,在浏览器验证环境中重新生成了三张图片。环境为 Apple M1、macOS 27.0.1、Node.js 24.18.0、Chromium Headless Shell 151.0.7922.34,使用随应用打包的模型与 OpenCV,全部采用默认参数。

三张图片都小于默认短边上限,没有在 LowPoly 归一化时进一步缩小。按 10082.webp、lena.jpg、mickey.jpg 顺序各运行一次,第一张包含冷启动,后两张复用运行时;这不是统计性能基准。测量时先分析主体,再进行网格与 SVG 生成,因此两个阶段的耗时可以分别观察。

样例分析尺寸确认人脸人脸推理调用次数三角形数主体分析 / 网格与 SVGRGB RMSE最小角小于 10° 的面片比例
10082.webp1500×15000587,9783.19 s / 3.67 s2.7720.02%
lena.jpg512×51213121,5020.95 s / 3.00 s7.568.85%
mickey.jpg600×60001178,5963.26 s / 1.94 s8.216.12%

这里的推理调用次数只计算人脸特征点调用,主体分析耗时还包括分割、姿态等工作;网格耗时包含该阶段的输入准备、可能发生的运行时初始化、颜色与 SVG 生成,不是单独三角剖分耗时。RMSE 是 SVG 栅格化后、分析分辨率下的 8 位 RGB 差异,不能用于直接比较不同图片的“艺术质量”。版本、环境和测量数据保存在本次测量记录。

结构边界不依赖检测出人脸

10082 原始输入:天空、地平线、墙体和远处人物

当前 OpenFiles 默认参数生成的 10082 LowPoly 结果

这张图没有确认人脸,也没有保留头部回退区域。结果仍然能表现地平线、墙体和窗孔,说明结构保留不能只依赖人脸路径。与此同时,海平线附近和地面仍有密集细碎面片;20.02% 的小角度比例提示几何质量尚有空间。这个比例没有按面片面积加权,视觉影响还需要结合局部放大观察。

保真增加,也可能意味着抽象不足

本次验证使用的 Lena 输入

当前 OpenFiles 默认参数生成的 Lena LowPoly 结果

眼睛、嘴唇和脸部明暗得到了较细的表达,但帽子与羽毛区域也产生了大量小面片。512×512 的图像最终用了 21,502 个三角形,这已经提醒我:当前默认策略相当偏向细节保留,是否还足够“Low”,不能只看重建误差。

作为历史参照,第二篇当时保存的是下面这张输出:

第二篇博客保存的历史 LowPoly 输出

这只能用于回看风格方向。当前测试使用的输入文件与博客历史输入并不相同,旧图也没有完整的参数、面数预算和运行环境记录,所以这里没有把两者作为严格 A/B 实验,更不能据此声称新算法全面优于旧版。

卡通样例则揭示了另一种成本:最后没有确认人脸,却做了 117 次人脸推理,而且分割和姿态仍给出了人体相关结果。这说明“多找几次”需要与误检控制、非人像退出条件一起设计;诊断字段有值,也不自动代表语义判断正确。

相关研究走到了哪里

这里讨论的是从二维图像生成平面几何抽象,不把三维模型减面、低模场景生成和普通扩散模型画出“像三角形的纹理”混为一谈。下面是截至本文日期检索到、与当前实现直接相关的代表性记录,不是穷尽所有数据库的系统综述。

工作与时间主要思路对 OpenFiles 的启发或区别
Zhang、Xiao、Shi,2015,Low-poly style image and video processing实时图像/视频三角化,重视边缘采样和视频抖动问题旧版的重要起点;视频稳定性需要跨帧设计
Gai、Wang,2015 在线 / 2016 卷期,Artistic Low Poly rendering for images特征轮廓、显著性采样、特征流引导 CVT、约束三角化与稳健选色当前的轮廓约束、松弛、截尾选色与其思路相通;语义模型不是该论文的核心
Uasmith、Pukkaman、Sripian,2017,Low-Poly Image StylizationK-means 分区、轮廓提取、RDP 简化与 Delaunay,输出矢量图说明区域结构本身就是重要的采样依据
Ng、Wong、See,PCM 2017 / 2018 出版,Pic2Geom将边缘、显著性和人脸检测结合生成种子点“用人脸信息增强 LowPoly”已有公开先例,不能作为本文独有贡献
Lawonn、Günther,2019,Stylized Image Triangulation将三角化视为图像近似优化,移动顶点、细分、GPU 计算,并提供交互编辑和多种着色比当前有限轮次补点与翻边更明确地围绕重建目标组织优化
韩艳茹等,2021,图像和视频的低多边形渲染结合超像素交点、特征边差集采样、带约束二次误差简化;视频使用时间一致性超像素“先较密构建,再按约束简化”值得用于控制当前面数膨胀
Low、Wong、See、Ng,2021,Pic2PolyArt主体优先的三角形与多边形抽象,结合显著性、边缘和人脸信息人像只是主体的一类;抽象强弱和形状类型需要用户评价
Fang、Guo、Xiao、Fu,2023,Error-bounded Image Triangulation在颜色误差与三角形质量约束下减少复杂度,支持不同边形状与颜色函数当前尚无这种误差约束;有误差采样和翻边不等于“误差有界”
Joseph、Kovoor、Thomas,2024,Edge-Preserved Seed Point Generation各向异性扩散、熵图、保边种子点与 Delaunay可作为非人像采样基线;熵高也可能只是纹理复杂
Joseph、Kovoor、Thomas,2024,A Delaunay Triangulation-Based Low-Poly Image Abstraction分区边界采样、内部补点、面片平均色,并保存几何与颜色以重建图像可比较基本管线;文中的“重建阶段”不应自动理解为迭代误差优化
Laske、Ziegelmeier,2024,Image Triangulation Using the Sobel Operator for Vertex Selection研究以 Sobel 信息选点的图像三角化,附公开代码是清晰、容易建立对照的轻量路线;该条目为 Media Exposition
Joseph、Kovoor、Thomas,2025,A Two-Level Simplification Framework在 AI 生成图像上结合分区与六角网格采样,比较熵与显著性信息输入来自生成模型,不等于抽象算法本身是生成模型;也不能直接外推到真实人像
Wiersma、Binninger 等,SIGGRAPH 2026,Gradient Descent in the ALPS用语义生成先验优化平面网格的几何、拓扑与颜色,同时约束几何合法性和调色板提供更强抽象与实体制作方向;目标不等同于逐像素保真

另有 Ma、Chen、Bai 的 An interactive system for low-poly illustration generation from images using adaptive thinning,收录于 ICME 2017,1033—1038 页。本文查到了出版记录及后续论文引用,但没有获取原文进行完整核对,因此这里只记录其交互与自适应稀疏化方向,不评价效果或速度。

从这些工作看,至少有三条路线在并行发展:根据边缘与语义安排点的特征驱动路线,围绕颜色近似与面数进行优化的重建路线,以及用更强语义先验改变表达方式的生成式抽象路线。当前 OpenFiles 主要组合前两条,在人像局部加入了较多专门规则。

ALPS 尤其值得单独区分。作者用 score distillation sampling 优化合法的二维多边形网格,以从细到粗的简化处理拓扑变化,并约束有限调色板;它可以面向拼布、镶嵌等制作场景。其官方实现也明确说明,目标侧重语义和整体形状,并不逐像素匹配输入;当前公开实现依赖 PyTorch/CUDA 环境。对 OpenFiles 更合理的借鉴是可控调色板、面数约束和独立的艺术抽象模式,而不是直接替换现有默认管线。

基础工具也要区分论文与本地实现。SLIC 的正式 TPAMI 论文发表于 2012 年,SNIC 发表于 CVPR 2017。第二篇里“我实现的 SNIC 视觉效果不如 SLIC”,只是当时实现与参数下的观察;现在选择 SNIC 做局部连通分区,不与那个观察矛盾,也不能据此对两个算法作普遍排名。

下一步最值得做什么

第一优先级:把总预算和最终目标收回来

当前的细节参数影响初始间距与预算,但它不是最终三角形数。人脸、轮廓、交点和后续细化都可能继续增加预算;保护结构越多,越容易变成“每一步都合理,最后整张图过密”。

我倾向于先做两个改动:一个是真正可观测的总面数目标,另一个是在细节恢复之后做受约束简化。轮廓交点、必要五官结构不能随意删除,其他顶点则根据重建代价与视觉重要性竞争同一份预算。借鉴 2021 年约束简化和 2023 年误差约束工作的思路,比继续给每种特征增加一个固定百分比更有价值。

验收也应当换成曲线:在相同面数下,是否更好地保住轮廓和五官;在相同允许误差下,能否减少面数、耗时与 SVG 体积。对于约束本身就超过预算的输入,需要明确记录超预算原因,不能把结构损失藏在一个“已完成”的输出里。

第二优先级:让没有人脸的图片更快退出搜索

当前搜索已经给各分支设置边界,但多轮整图、裁剪、旋转、分割和确认叠加,仍可能很贵。卡通样例的 117 次调用只是一个实例,不能推断所有非人像都如此,却足以提示需要全局的调用数和时间预算。

可尝试分层候选筛选、候选失败结果缓存、按新增有效证据衰减的停止策略,并为全图搜索设统一预算。评价时必须同时统计远处小脸的召回、误检和总调用次数,否则“快了”可能只是把困难人脸全部放弃。

当前分割输出主要是类别掩码,没有保留完整置信度掩码;颜色、局部支持率和经验阈值承担了不少复核工作。按需获取不确定区域的置信度,可能比不断追加重试条件更容易管理,但也要计算额外内存与推理成本。

还要区分两种失败:没有检测到人脸时,图像边缘路径仍可正常运行;模型加载或推理异常时,当前入口会抛出错误。后者是否提供明确标记的纯图像降级路径,是产品可靠性的另一项选择。

第三优先级:统一细化、翻边与最终着色的误差标准

当前细化和翻边基于有限采样误差,最终颜色却还会经过面积积分、截尾、语义限制和肤色协调。因此某次翻边在代理指标上变好,不一定意味着最终导出的颜色误差也同幅度改善。

可以先在最后一轮优化里统一色彩估计,比较面积均值、当前截尾颜色和最终后处理颜色对应的目标。再把“整体色差”和“轮廓两侧被混合的代价”分别计算,避免低 RMSE 掩盖眼睛或细线的局部损失。

透明边缘也应该进入同一套评价:取色已经考虑 alpha,但当前一些误差细化和翻边会跳过半透明面片。未来需要同时度量透明覆盖率与颜色,不能只去掉 alpha 后看 RGB。

其他改进方向

方向当前限制值得验证的改动
大图与全景图短边上限没有约束极端长边和总像素数同时限制短边、长边与像素预算;几何分析和高分辨率取色分离,并验证映射误差
通用主体密度主要依赖人脸与对比度,动物、文字和产品没有同等语义支持引入轻量显著性或任务相关检测,但只在图像边缘支持下提升约束优先级
多尺度几何质量松弛使用固定粗网格,小区域可能表达不足自适应松弛分辨率;区分必要的细节小面片与无意义针状面片
稳定的结构表达阈值、独立预算与补偿分支较多用统一候选评分和尺度归一化减少规则冲突,保留困难样例回归
分阶段缓存主体与完整结果可复用,几何与着色仍耦合较紧参数依赖分层,纯颜色变更复用网格;用内容版本避免工作流缓存串图
风格控制默认偏向还原细节,颜色变化不等于整体构图控制有限调色板、区域细节权重、局部保留/简化操作;用主观盲评检验收益
SVG 体积接缝底层重复绘制面片,精细网格输出较大区分预览与导出策略,测试坐标量化和颜色复用,并检查接缝与透明边缘
视频当前管线针对静态图像,确定性只保证同一输入可复现跟踪顶点、语义区域与拓扑变化;评价闪烁、遮挡和切镜头,而非逐帧套用静图算法

这些方向有些互相冲突。例如,更强的调色板约束可能增加像素误差,却让风格更统一;更严格的小角度要求可能损害细线。它们适合通过明确的模式与目标管理,而不是继续让一个默认参数承担所有期待。

怎样证明下一版真的更好

现有测试覆盖了很多具体回归:轮廓锚点、鼻尖、眼部、面部光照、语义确认、透明取色、Worker 取消和来源归一化。浏览器验证还能生成 SVG、PNG 与测量数据。这些是很好的基础,但测试存在和部分示例通过,不代表完整算法评测已经完成。

下一轮评测,我会固定输入文件、应用发布版本、模型、参数与运行环境,至少做四类对照:

  1. 基础算法对照:随机点 Delaunay、边缘点 Delaunay、SLIC 中心点方案、当前方案;如复现论文,单独说明复现差异。
  2. 消融对照:分别关闭语义引导、约束边、松弛、误差细化、截尾取色,观察每一步的收益和代价。
  3. 困难场景分组:小脸、侧脸、多人、低光、手部、动物、文字、平坦背景、透明边缘和极端宽高比;避免只在修补过的样例上评价。
  4. 成本对照:同面数、同分辨率、同时间预算分别比较,报告冷启动与热运行的多次统计,而不是单次最好成绩。

客观指标包括重建误差、轮廓偏移、局部五官损失、小角度面片比例、按面积加权的退化程度、面数、内存和 SVG 大小。还需要在相同显示尺寸下做主观盲评,分别询问“是否认得主体”和“是否喜欢这种抽象”。像不像与好不好看,不是同一个问题。

回头看,前两篇最有价值的成果,是把边缘、超像素和人脸模型组合成了一条可运行的 Web 管线。现在最值得继续推进的,是让它学会节制:哪些细节必须保住,哪些可以被概括,以及为此愿意付出多少几何和计算成本。

版本与测量说明

本文对应 OpenFiles 3.2026.1008,可通过官网获取桌面应用,并在该版本发布说明中查看更新内容。体验 LowPoly 时,可以使用独立的图像转换工具,也可以把它加入文件处理工作流。

上面的三张样例基于这一版本的 LowPoly 实现,在浏览器验证环境中各运行一次;配图和测量记录保留了环境、运行顺序与结果。这里的耗时是分阶段测量,不代表桌面安装包内从打开文件到完成导出的完整耗时,也不代表多次运行的统计结果。本文没有重新执行完整回归测试或复现论文基准。

相关链接


评论 (0)

登录后即可发表评论