Как выбрать изображение с более высокой контрастностью в PHP? - PullRequest
1 голос
/ 01 июня 2009

Для механизма миниатюр я хотел бы разработать алгоритм, который берет x случайных миниатюр (обрезка, без изменения размера) из изображения, анализирует их на контрастность и выбирает наиболее контрастный. Я работаю с PHP и Imagick, но я был бы рад получить несколько общих советов о том, как вычислить контраст изображений.

Кажется, что гораздо проще вычислить контраст, например, подсчет цветов, вычисление яркости и т. Д.

Каков ваш опыт анализа материала изображения?

Ответы [ 2 ]

2 голосов
/ 01 июня 2009

Я бы сделал это так (псевдокод):

L[256] = {0,0,0...}

loop over each pixel:
    luminance = avg(R,G,B)
    increment L[luminance] by 1

for i = 0 to 255:
    if L[i] < C: L[i] = 0       // C = threshold of your chose

find index of first and last non-zero value of L[]
contrast = last - first
1 голос
/ 03 июня 2009

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

Я предлагаю вам использовать гистограммный подход, чтобы описать контраст данного изображения, а затем сравнить свойства гистограмм, чтобы определить изображение с наибольшим контрастом при его определении. Вы можете использовать различные хорошо известные контейнеры для представления гистограммы в коде или создать класс для удовлетворения ваших конкретных потребностей. (Я не имею в виду, что вам нужно создать гистограмму в форме диаграммы - просто статистическое представление значений интенсивности.) Вы можете использовать дисперсию каждой гистограммы непосредственно в качестве меры контрастности или использовать стандартное отклонение, если с ним легче работать.

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

При использовании этого подхода низкоконтрастное изображение, как правило, будет иметь относительно немного дискретных значений интенсивности, и они будут иметь тенденцию быть тесно сгруппированными вместе, а не равномерно распределенными. (Как правило, они также будут сгруппированы по направлению к центру диапазона.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...