Алгоритм симуляции дальтонизма?
В Интернете есть много инструментов, которые снимают изображения и имитируют, как это изображение может выглядеть для человека с дальтонизмом. Однако я не могу найти описания этих алгоритмов.
Есть ли стандартный алгоритм, используемый для моделирования дальтонизма? Я знаю, что существует много видов дальтонизма ( более подробную информацию см. На странице Википедии), но в первую очередь меня интересуют алгоритмы, моделирующие дихроматичность.
4 ответа
Я нашел пример вместе с рабочим кодом Javascript здесь; Кодекс также включает в себя некоторые ссылки на научные статьи в качестве комментариев. Я предполагаю, что как только вы прочитаете эту статью, математика будет иметь смысл.
У меня было такое же разочарование, и я написал статью, в которой сравнивал симуляции цветовой слепоты с открытым исходным кодом . Вкратце, есть четыре основных алгоритма:
Coblis и "функция моделирования дальтоников HCIRN". Вы найдете его во многих местах, а также реализацию Javascript от MaPePeR . Полная функция моделирования HCIRN не была должным образом оценена, но на практике имеет смысл. Однако приближение ColorMatrix с помощью колорджека очень неточно, и его следует полностью избегать (об этом сказал сам автор). К сожалению, это все еще широко распространено, так как его было легко скопировать / вставить.
«Компьютерное моделирование цветового оформления дихроматов» Бреттеля, Вьено и Моллона (1997). Очень солидная ссылка. Подходит для всех видов дихроматии. Я написал реализацию C в в свободном доступеlibDaltonLens .
«Цветовые карты цифрового видео для проверки разборчивости дисплеев с помощью дихроматов» Вьено, Бреттел и Моллон (1999). Точная ссылка также упрощает работу 1997 года по протанопии и дейтеранопии (2 из 3 видов дальтонизма). Также в libDaltonLens.
«Физиологически обоснованная модель для моделирования дефицита цветового зрения» Machado et al. (2009). Предварительно вычисленные матрицы доступны на их веб-сайте , что позволяет легко реализовать их самостоятельно. Вам просто нужно добавить преобразование из sRGB в linearRGB.
Сначала мы должны понять, как работает глаз:
У нормального / здорового глаза есть 3 типа колбочек и 1 тип палочек, которые выполняют функции активации в видимом спектре света.
Затем их активация проходит через некоторую функцию, чтобы произвести сигнал, который поступает в ваш мозг. Грубо говоря, функция принимает 4 канала на входе и производит 3 канала на выходе (а именно, яркость, желто-синий и красно-зеленый).
У человека, страдающего дальтонизмом, одна из этих двух вещей будет отличаться (обычно / всегда 1.), поэтому, например, человеку не хватает одного типа колбочки или активация конуса будет другой.
Лучше всего было бы:
Преобразуйте все пиксели из пространства RGB в комбинацию частот (с интенсивностями). Для этого сначала рассчитайте активацию каждого из трех колбочек (здорового человека), а затем найдите "естественное" решение для набора частот (+ интенсивности), которое приведет к такой же активации. Конечно, одно решение - это просто исходные три частоты RGB с их интенсивностями, но маловероятно, что исходное изображение действительно имело это. Естественным решением может быть, например, нормальное распределение вокруг некоторой частоты (или даже только одной частоты).
Затем (снова для каждого пикселя) вычислите активации колбочек дальтоника для вашей комбинации частот.
Наконец, найдите такое значение RGB, чтобы у здорового человека были те же активации, что и у дальтоника.
Обратите внимание: если способ комбинирования этих активаций также отличается для соответствующего типа дальтонизма, вы, возможно, захотите выполнить это также в описанных выше шагах. (Таким образом, вместо сопоставления активаций вы сопоставляете результат функции с активациями).
Похоже, вы ответили в записи Википедии, которую вы связали.
Например:
Протанопия (1% мужчин): не имея длинноволновых чувствительных колбочек сетчатки, люди с этим заболеванием не могут различить цвета в зелено-желто-красной части спектра. У них есть нейтральная точка на зеленоватой длине волны около 492 нм, то есть они не могут отличить свет этой длины волны от белого.
Таким образом, вам нужно нейтрализовать любые цвета в зелено-желто-красном спектре до белого. Насыщенность цвета изображения
Другие 2 типа дихроматии могут быть обработаны аналогично.