你或许玩过拼豆——把一粒粒彩色的小豆子按照图纸摆在模板上,再熨烫定型,最终做成像素画风格的挂件。我觉得这跟最近学习的图像处理方面的东西有一些关联,并且挺有意思的,所以我想尝试把图片做成拼豆图案。

观察拼豆图案(如上图所示),大多有一个特点,就是基本保留了图像的原有核心特征(比如眼睛、嘴巴),同时图像会呈现出锯齿状的特征,这其实很正常,因为拼豆图案为了便于手工制作通常格数不会太多(应该在256*256以下),要不然拼起来太费劲。这种锯齿状的特征其实对照片(下图是自己拍的)进行放大就容易观察到类似的现象:

可以看到会有很明显的模糊感。照片只是对于物理世界的离散化的压缩,而拼豆则相当于是更高压缩度的图片(直接用一个个像素去拼接)。并且颜色更少、像素更低。如何进行压缩呢,这便是下文介绍的一些颜色量化算法:
在色彩空间处理
在色彩空间内进行颜色替换,不引入任何空间纹理或误差传播,像素之间独立处理。因为不依赖像素的邻域关系,对图像结构的干预小,但也容易带来色调分离。

K‑Means 聚类:将图像中所有像素的颜色视为高维空间中的点集,通过迭代优化使得每个像素到其所属类心的距离平方和最小。最终得到的若干个类心就是调色板颜色。在拼豆生成中,K‑Means 能根据图片自身颜色分布“量身定制”,尤其对颜色过渡丰富的照片,可以在有限颜色选择下保留更多渐变层次。但它是全局聚类,对细节颜色不够敏感(如下图)。

Nearest(最近邻): 则是一种像素映射方法——具体来说,就是在选定调色板后,使用 CIEDE2000 色差公式寻找与每个像素知觉上最接近的颜色。CIEDE2000 是对人眼色彩感知差异的精细建模,远优于简单的 RGB 欧氏距离,因此可以最大程度保证替换后的颜色在人眼看来与原图一致。然而,由于缺乏抖动,相邻像素被独立量化,平滑过渡区会形成明显的条带(色带),产生不自然的等高线(如下图)。

误差扩散:
基于反馈的空间抖动算法,设计思想是把当前像素量化时产生的颜色误差,按照固定权重分布到周围尚未处理的像素上。这样一来,局部邻域内被叠加的误差会补偿颜色的偏差,使得在稍远距离观看时,局部平均颜色与原图保持一致。误差被有意推往高频区域,利用人眼视觉系统的低通特性,让大脑自行“混合”出正确的色调。

Floyd‑Steinberg 抖动:使用最简单的 4‑像素误差扩散核,将误差的 7/16、3/16、5/16、1/16 分别分配给右方、左下、下方、右下四个邻域。它的计算量很小,且能高效打破色带,产生类似照片的柔和过渡,会让渐变区域布满细密的杂点。在大面积平坦区域可能产生明显的“蠕虫状”纹理,视觉上会感觉有规律的走线。

Atkinson 抖动是 Apple 早期 Macintosh计算机上使用的算法,它的扩散核只有 6 个像素,且权重全部为 1/8(接收误差的像素不包含水平方向的邻点)。Atkinson保留一部分误差扩散,这样可以在对比度保持和噪声抑制之间取得一种独特平衡。它的输出比 Floyd‑Steinberg 更“干净”,能保留更多细节和边缘,但也因此会残留一些高对比度边界,颗粒稀疏而有风格。

结构抖动与自适应
设计思想是关注图像的结构信息,或利用规则纹理,或根据局部内容动态调整抖动策略,以平衡噪声隐藏与边缘保持。它们不再满足于纯粹的颜色精度或误差平均,而是试图在视觉最重要的边缘、纹理处做到最优保真。

Bayer 有序抖动使用一个周期性的阈值矩阵(Bayer 矩阵),将每个像素的灰度级(或颜色通道)与矩阵中对应位置的阈值作比较,决定输出何种颜色。整个过程不依赖邻域误差传播,因此像素之间完全并行且确定。Bayer 抖动会把量化噪声组织成规则的点阵纹理,会生成类似十字绣或马赛克镶嵌的几何图形,在平滑渐变区会出现明显的图案化伪影。

Edge‑Aware FS 是对传统误差扩散的增强。它在 Floyd‑Steinberg 等算法基础上,先用 Sobel 算子等检测图像的边缘,然后在边缘附近改变误差扩散的方向或权重:顺着边缘方向扩散更多误差,垂直于边缘方向扩散更少。这样可以避免普通误差扩散在边缘处引入的模糊或锯齿,使得轮廓和线条更加锐利清晰,同时又在平坦区域保持了柔和的渐变过渡。

Adaptive Hybrid 则更进一步,将多种映射方法融合在一个框架内。它首先对图像进行区域划分——例如根据局部方差识别出平坦区、纹理区和边缘区——然后在平坦区采用最近邻映射或有序抖动来避免噪声,在纹理区使用误差扩散来保持细节,在边缘区则可能结合 Edge‑Aware 策略或直接保留最高对比度的替换。从而在不同图像内容上都能给出更好的视觉效果,减少杂点,同时又保留复杂纹理的丰富度。
从色彩空间映射,到空间纹理,再到内容感知与自适应,本质上都是在解决同一个矛盾:如何用极度有限的颜色,模拟出人眼所见的丰富层次。同一张图片可以有多种不同风格的拼豆方案,适合自己的才是最好的。
附一张自己做的pikachu拼豆图纸:

"Smile, you never know who's watching."
参考资料

782

被折叠的 条评论
为什么被折叠?



