繁体   English   中英

将图像中的每个像素设置为与颜色列表最接近的匹配

[英]Setting every pixel in image to closest match from a list of Colors

如何在C#中将图像中每个像素的颜色设置为与RGB格式的颜色列表中最接近的颜色匹配(无Alpha),该颜色可以是任意长度?

它基本上是在创建自定义BitmapPalette,但是由于您无法做到这一点(请相信我,我已经尝试了所有可能的方法),因此我需要一种替代方法。

有人知道这样做的方法吗?

男孩...我希望你喜欢数学...

这是一个棘手的问题。 要确定两种颜色之间的“贴合度”,您首先必须了解工作所在的颜色空间/颜色模型。 RGB颜色模型(不计算alpha通道)本质上本质上是欧几里得:每种颜色都映射到3D空间中的一个点。 因此,两个颜色C1和C2之间的假定距离为

  - C2  ) 2 + (C1  - C2  ) 2 + (C1  - C2  ) 2 ) 距离= SQRT((C1  -C2 2 +(C1  -C2 2 +(C1  -C2 2 

WRT“正常”人类的视觉感知,这不一定是正确的。 考虑到这一点变得更加复杂。

尝试以下两篇文章作为起点:

颜色常见问题解答还提供了许多指向其他颜色空间资源链接

http://www.golden-gryphon.com/software/misc/color-links.html上的更多链接

这是一篇有关色差的论文,也可能会有所帮助: http : //www.axiphos.com/Reports/ColorDifferences.pdf

布鲁斯·林德布洛姆(Bruce Lindbloom)的网站上还有很多东西,包括一个色差计算器,该计算器可以在CIE色彩空间(可以进行距离计算)中使用。

ColorMine是开放源代码C#库,它具有在色彩空间之间进行转换并通过几种delta-e方法进行比较的方法

例如,这将为您提供基于最常见的delta-E方法(Cie76)的相似度得分

var a = new Rgb { R = 23, G = 117, B = 114 }
var b = new Rgb { R = 113, G = 27, B = 11 }
var deltaE = a.Compare(b,new Cie1976Comparison());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM