簡體   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