Найдите изображения с палитрой схожего цвета с Python

Если Вы используете JVM Sun и интересуетесь использованием внутренней памяти приложения (сколько из выделенной памяти Ваше приложение использует), я предпочитаю включать встроенный вход сборки "мусора" JVMs. Вы просто добавляете-verbose:gc к команде запуска.

Из документации Sun:

параметр командной строки-verbose:gc печатает информацию в каждом наборе. Обратите внимание, что формат вывода-verbose:gc подвержен изменениям между выпусками платформы J2SE. Например, здесь производится из большого серверного приложения:

[GC 325407K->83000K(776768K), 0.2300771 secs]
[GC 325816K->83372K(776768K), 0.2454258 secs]
[Full GC 267628K->83769K(776768K), 1.8479984 secs]

Здесь мы видим два незначительных набора и один главный. Числа прежде и после стрелки

325407K->83000K (in the first line)

указывают на объединенный размер живых объектов прежде и после сборки "мусора", соответственно. После незначительных наборов количество включает объекты, которые не обязательно живы, но не могут быть исправлены, или потому что они непосредственно живы, или потому что они в или сосланы от штатного поколения. Число в круглой скобке

(776768K) (in the first line)

является общим свободным местом, не считая пространство в постоянном поколении, которое является общей "кучей" минус одни из пробелов оставшегося в живых. Незначительный набор взял приблизительно четверть секунды.

0.2300771 secs (in the first line)

Для большего количества информации см.: http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

5
задан jack 10 November 2009 в 00:03
поделиться

2 ответа

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

Количество сегментов будет зависеть от того, насколько точными вы хотите быть. Тип данных, объединенных в сегмент, будет определять, как вы расставляете приоритеты для поиска.

Например, если вас больше всего интересует оттенок, вы можете определить, в какой сегмент входит каждый отдельный пиксель изображения, как:

def bucket_from_pixel(r, g, b):
    hue = hue_from_rgb(r, g, b) # [0, 360)
    return (hue * NUM_BUCKETS) / 360

] Если вам также нужен общий сопоставитель, вы можете выбрать сегмент на основе полного значения RGB.

Используя PIL, вы можете использовать встроенную функцию гистограмма . Гистограммы «близости» могут быть рассчитаны с использованием любой меры расстояния по вашему желанию. Например, расстояние L1 может быть:

hist_sel = normalize(sel.histogram())
hist = normalize(o.histogram()) # These normalized histograms should be stored

dist = sum([abs(x) for x in (hist_sel - hist)])

L2 будет:

dist = sqrt(sum([x*x for x in (hist_sel - hist)]))

Нормализация просто заставляет сумму гистограммы равняться некоторому постоянному значению (1.0 отлично работает). Это важно для правильного сравнения больших изображений с маленькими. Если вы собираетесь использовать расстояния L1, вам следует использовать меру L1 в normalize . Если L2, то L2.

10
ответ дан 13 December 2019 в 22:10
поделиться
0
ответ дан 13 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: