Установка каждого пикселя в изображении для наиболее близкого соответствия из списка цветов - PullRequest
3 голосов
/ 18 ноября 2011

Как я могу установить цвет каждого пикселя на изображении в соответствии с его наиболее близким совпадением цветов из списка цветов в формате RGB (без альфа), который может быть любой длины, в C #?

Этов основном создаю собственную BitmapPalette, но так как вы не можете этого сделать (поверьте мне, я перепробовал все возможное для этого), мне нужна альтернатива.

Кто-нибудь знает способ сделать это?

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Мальчик ... Я надеюсь, ты любишь математику ...

Это сложный вопрос.Чтобы определить «близость соответствия» между двумя цветами, сначала необходимо понять цветовое пространство / цветовую модель, в которой вы работаете.Цветовая модель RGB (не считая альфа-канал) по своей сути является евклидовой: каждый цвет отображается в точку в трехмерном пространстве.Следовательно, предполагаемое расстояние между двумя цветами С1 и С2 составляет

Distance = SQRT( (C1<sub><i>red</i></sub> - C2<sub><i>red</i></sub>)<sup>2</sup> +  (C1<sub><i>green</i></sub> - C2<sub><i>green</i></sub>)<sup>2</sup> +  (C1<sub><i>blue</i></sub> - C2<sub><i>blue</i></sub>)<sup>2</sup> )

WRT "нормальное" зрительное восприятие человека, это не обязательно правильно.Принимать это во внимание становится гораздо сложнее.

Попробуйте эти два документа в качестве отправных точек:

FAQ по цвету также предоставляют множество ссылок на другой ресурс цветового пространства s.

Еще несколько ссылок на http://www.golden -gryphon.com / software / misc / color-links.html

Вот статья о цветовых различиях, которая также может помочь: http://www.axiphos.com/Reports/ColorDifferences.pdf

Брюса Линдблумана веб-сайте также есть множество вещей, в том числе калькулятор разности цветов, который работает в цветовом пространстве CIE (в котором предусмотрены вычисления расстояния).

1 голос
/ 20 июля 2013

ColorMine - это библиотека C # с открытым исходным кодом, которая имеет методы для преобразования между цветовыми пространствами и сравнения с помощью пары методов delta-e

Например, это даст вам оценку сходства на основенаиболее распространенный метод дельта-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());
...