将图像颜色减少(量化)至 256 色

问题描述 投票:0回答:1

我需要手动或通过一些内置的 .net 功能将 32 位 bmp 减少到最多 256 种颜色。我还没有找到任何有关如何操作的信息。请有人提供一些指示。

编辑:澄清一下,我并不只是想将 32 位 bmp 转换为 8 位 bmp。我想将输入 bmp 映射到标准 256 调色板,因此我知道它将在便携式设备上正常显示。一种“确保网络安全”功能。

c# .net image-processing colors quantization
1个回答
0
投票

你所追求的叫做量化
具体来说是颜色量化

实现它的一种简单方法,在某种意义上也是最优的(参见Lloyd 算法,也称为 Lloyd Max 量化),是通过 K 均值聚类

如果图像的大小为

(numRows x numCols x 3)
,那么它基本上具有
numPx = numRows * numCols
3D 样本。
人们可以将它们聚集成
numColors
,在你的例子中是 256。
然后将每个像素颜色分配给最接近其原始值的质心(聚类中心)。

这是一个简单的例子。

输入图片

enter image description here

量化图像(256 色)

enter image description here

量化图像(128 色)

enter image description here

量化图像(64 色)

enter image description here

量化图像(32 色)

enter image description here

备注

  1. 最好在白色和黑色必须是簇的约束下应用量化。它需要手动实现 K-Means,但做起来非常简单。
  2. 在上面我使用平方欧几里德作为度量函数。此外,颜色表示为
    RGB
    。对于此类任务,最好使用不同的颜色表示。例如,使用
    LAB
    颜色表示
  3. 通过计算,您可以对聚类的像素数进行二次采样。
  4. 为了使其具有空间意识,您可以使用超级像素。

代码可以在我的 StackOverflow GitHub Repository 上找到(查看

StackOverflow\Q2176266
文件夹)。

© www.soinside.com 2019 - 2024. All rights reserved.