【问题标题】:Color Quantization Algorithm颜色量化算法
【发布时间】:2011-08-26 10:34:34
【问题描述】:

我正在研究一种颜色量化算法。

这是基本流程:

  • 将图像转换为一组三维向量(例如 RGB 空间)。
  • 将该集合放入集合列表中。
  • 虽然列表中的套数少于您想要的颜色数:
    • 从列表中删除最差的集合。
    • 一分为二。
    • 在列表中添加两个新集。
  • 完成。

我所说的“最差集合”是指每个向量与平均向量之间的累积距离较大的集合。

这就是我“拆分集合”的方式:

  • 通过将所有向量相加并除以向量计数来计算平均向量。
  • 计算由每个向量与均值向量之间的绝对差值组成的向量。对其进行归一化,我们得到一个平面的法线,将我们的向量集分成相等的两半。
  • 根据向量属于平面的哪一侧,使用此法线二将集合分成两组。

这基本上可行,但图像调色板看起来很奇怪,就像从线性渐变中挑选出来的......

我的算法完全错误吗?有人可以帮忙吗?

【问题讨论】:

    标签: algorithm colors quantization


    【解决方案1】:

    问题在于您的算法很大程度上取决于初始集合。因为您只拆分集合,所以如果彼此非常接近的两个点恰好在开始时位于不同的集合中,它们将始终位于不同的集合中。这不好。

    所以是的 - 这比 k-means 算法更糟糕。

    【讨论】:

    • 我们是否可以同意,如果我们想将图片转换为单色位图,最好的颜色是包含所有像素的矢量集的质心?现在,如果我们想要一个 2 色位图,我们选择的任何颜色最终都会在我们的颜色空间中定义一个平面。最好的平面是否包含整个集合的质心?如果是这样,如何计算它是正常的?非常感谢。
    【解决方案2】:

    颜色量化的第一步是从N种颜色中选择具有代表性的K种颜色。
    但是,对于具有如此多颜色的图像,一些渐变/条带问题是不可避免的。
    然后,误差扩散和抖动通过用可用颜色近似不可用颜色,通过以模仿不可用颜色的方式混合和匹配可用颜色来工作。

    Top 6 color quantization algorithms.

    这里有一些输出示例:

    原图:

    通过 NeuQuant 神经网络量化算法减少到 256 种颜色:

    通过 Xialoin Wu 的快速优化颜色量化算法减少到 256 种颜色:


    原图:

    通过 NeuQuant 神经网络量化算法减少到 256 种颜色:
    通过成对最近邻量化算法减少到 256 种颜色:

    读者可以看到,前 5 种颜色量化算法中误差扩散和抖动的编码非常相似。
    每种算法都有自己的优势。我分享颜色量化的来源,以邀请进一步讨论和改进。
    此类源代码是用 C++ 编写的,以获得最佳性能。 它也是学习机器学习的一个机会。

    【讨论】:

    • 虽然此链接可能会回答问题,但 Stack Overflow 上不鼓励仅链接的答案,您可以通过获取链接的重要部分并将其放入您的答案来改进此答案,这样可以确保您的答案是如果链接被更改或删除,仍然是一个答案:)
    【解决方案3】:

    我看不出这比 k-means 算法更好。也许你应该只做常规的 k-means。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 2016-06-17
      • 2010-09-12
      相关资源
      最近更新 更多