【问题标题】:Image color remapping in C#C# 中的图像颜色重映射
【发布时间】:2018-08-04 17:07:42
【问题描述】:

我有 22 种颜色,我想用这 22 种颜色绘制任何图像。

Image image = GetImageFromURL(""); // returns an image object
Bitmap bitmap = new Bitmap(image);

String[] colors = {
    "#FFFFFF", // white
    "#C1C1C1", // light grey
    "#EF130B", // red
    "#FF7100", // orange
    "#FFE400", // yellow
    "#00CC00", // light green
    "#00B2FF", // cyan
    "#231FD3", // blue
    "#A300BA", // purple
    "#D37CAA", // pink
    "#A0522D", // light brown
    "#000000", // black
    "#4C4C4C", // dark grey
    "#740B07", // dark red
    "#C23800", // dark orange
    "#E8A200", // dark yellow
    "#005510", // dark green
    "#00569E", // dark cyan
    "#0E0865", // dark blue
    "#550069", // dark purple
    "#A75574", // dark pink
    "#63300D", // dark brown
};

我怎样才能做到最好?我目前不知道如何将数十亿种颜色转换为这 22 种颜色...

如果有任何帮助,我将不胜感激,在此先感谢。

【问题讨论】:

  • 尝试在您的托盘中找到与您要转换为的颜色最接近的匹配项?也许根据所有三种不同的 RGB 计算分数。
  • 关于@Karolis 所说的,您可以使用矢量数学来找到从像素颜色到调色板颜色的距离并使用最近的那个。
  • 一种方法是使用一些图像处理库或第三方工具nl.mathworks.com/help/matlab/ref/rgb2ind.html将图像转换为8位图像,这会将可用颜色的数量限制为256。然后找到最接近的匹配。
  • @AntonSizikov 那是关于选择调色板的。这个案例已经一个调色板。

标签: c# image image-processing colors


【解决方案1】:

可以使用 3D 颜色空间中的毕达哥拉斯距离找到每个像素最接近的颜色匹配。我在这里解释了整个过程,包括如何以有效的方式将此更改应用于图像:

How to convert a colored image to a image that has only two predefined colors?

这个问题是关于 2 色调色板的,但只要使用每像素 8 位的图像作为结果,任何调色板的过程都完全相同。

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 2019-01-12
    • 2015-09-12
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多