Математический расчет яркости изображения (теория цвета) - PullRequest
2 голосов
/ 13 апреля 2019

Недавно я протестировал следующий алгоритм определения «красочности» изображения с помощью David Haslera и Sabine Susstrunk , который реализован в Python здесь . Однако я заметил кое-что интересное о производительности этого алгоритма на некоторых тестовых изображениях.

Показатель яркости для RGB-изображения размером 3x1, 8 бит на канал для одного красного, зеленого и синего пикселей, кажется, настолько велик, насколько это возможно (не стесняйтесь доказать, что я не прав, это просто то, что я делаю » мы наблюдали).

Вот что я имею в виду. Это изображение имеет цветность 206,52:

enter image description here

в то время как это изображение 4x4 имеет цветность 185,13:

enter image description here

, в то время как чистое черно-белое изображение имеет цветность 0, для сравнения. (Эти значения рассчитываются, когда уровни для каждого канала хранятся в виде целых чисел от 0 до 255 включительно).

Интуитивно я считаю, что второе изображение будет гораздо более «красочным», чем первое, но это не тот результат, который дает этот алгоритм.

По сути, я ищу какое-то другое измерение, которое соответствует изменению цветов, которые появляются на изображении. Однако я не совсем уверен, как это будет выглядеть математически, тем более что изображения представлены в виде отдельных красных, синих и зеленых каналов.

Одна из идей может заключаться в том, чтобы просто подсчитывать количество отдельных пикселей в изображении (добавляйте один к подсчету каждый раз, когда виден пиксель нового цвета), но это не помогает, когда есть много темных (но разных) пикселей, которые практически неразличимы. Это также не сработает, если будет несколько слегка отличающихся пикселей примерно одинакового цвета. Тем не менее алгоритм в этой статье, кажется, нарушает мою интуицию при тестировании такого экстремального случая, как этот.

Кто-нибудь знает другие метрики, которые могут дать более точное представление о разнообразии цветов, которые появляются на изображении? Или, может быть, вы сами предложите? Я открыт для любых идей.

1 Ответ

0 голосов
/ 14 апреля 2019

Я бы порекомендовал (не из какого-либо органа) преобразовать изображение в HSV, а затем построить гистограмму для определенного нерегулярного набора элементов разрешения. Одна простая схема будет

  1. три серых контейнера ( с <1/3): «черный» (<em> v <1/3), «серый» (<em> v <2 / 3) и «белый» </li>
  2. шесть тоновых бункеров ( s <2/3): для каждого из трех основных цветов (трети <em>h ), «оттенок» ( v > 1/2) и «тень»
  3. двенадцать чистых корзин: одно и то же v различие для каждого из шести оттенков

Это очень приблизительно соответствует воспринимаемому расстоянию между цветами; другие номера бункеров можно легко получить, отрегулировав номера различных подразделений.

Нормализовать гистограмму для получения эмпирического дискретного распределения вероятностей ; вычислить ее энтропию и нормализовать путем деления на теоретический максимум (log N для N бинов). Изображение с равным количеством пикселей в каждой ячейке будет иметь 1 балл; любой сплошной цвет получит 0.

Конечно, есть патологические случаи, например, изображение, содержащее только два отдельных значения пикселей, которые лежат только на границе между ячейками. Такое изображение оценивает log 2 / log N , и эту идею можно расширить до 8 корзин, которые встречаются в общем углу. Возможно, стоит добавить небольшое количество шума к изображению (или к его копиям, слитым с оригиналом), чтобы уменьшить вероятность таких аномалий.

Чтобы считать полностью красное изображение (немного) более красочным, чем полностью серое, вы можете ввести «тестовый образец» серых в гистограмму (и отрегулировать нормализацию энтропии, чтобы учесть увеличенный минимум и уменьшены максимальные значения). Тестовый шаблон должен быть сопоставим по размеру с изображением.

...