[英]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.