алгоритм макета для плотно упакованных миниатюр изображений

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

  • разные соотношения сторон
  • доступно при том же разрешении источника (самый длинный край 256 пикселей)

Я хотел бы найти оптимальное решение (вероятно, должно быть эвристическим), которое позволило бы мне сбалансировать:

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

Я думаю, что это вариант проблемы упаковки прямоугольников.

Я нашел несколько хороших ссылок: Fast Optimizing Rectangle Алгоритм упаковки для создания CSS-спрайтов

Но я хотел узнать у экспертов, знает ли кто-нибудь о:

  • любые установленные алгоритмы, которые общедоступны,
  • любые библиотеки с открытым исходным кодом, которые их реализуют, или
  • любые другие математические справочники или рекомендации, которые могут помочь мне создать что-то столь же хорошее, как: http://labs.tineye.com/multicolr#colors=4b669e;weights=100;

person stanhope    schedule 01.10.2012    source источник
comment
Мне интересно, нужно ли мне создать какую-то нейронную сеть, где каждая из точек баланса становится весом на узле (Википедия: ссылка).   -  person stanhope    schedule 01.10.2012
comment
Проблема становится довольно простой, если вы думаете об одном столбце изображений. Там нет упаковки, за исключением, возможно, двух портретных изображений рядом друг с другом, только одна длинная строка изображений. Когда я представляю второй столбец, теперь есть только несколько мест, куда можно поместить каждое изображение (под 1, под 2, рядом с 1, рядом с 2). Может быть, это самый простой способ создать сложный алгоритм?   -  person stanhope    schedule 01.10.2012
comment
Не пишите в комментариях пояснения к вашему вопросу, отредактируйте свой вопрос. Многие люди на SO не читают комментарии, в основном они не очень полезны, и многие из нас их отфильтровывают.   -  person High Performance Mark    schedule 01.10.2012
comment
Спасибо, Марк, но если вы их прочитаете, то увидите, что они на самом деле не являются частью вопроса. Это комментарии по вопросу - идеи больше, чем что-либо. Я не хотел путать вопрос с моими ложными рассуждениями о том, как может выглядеть решение, именно потому, что я знаю, что многие люди в SO не читают комментарии.   -  person stanhope    schedule 01.10.2012
comment
Таким образом, на этот вопрос очень сложно ответить, потому что это своего рода многокритериальная оптимизационная задача. Конечно, вы можете использовать все знания, которые доступны в отношении 2-мерной упаковки и всего остального, но, возможно, вам сначала нужно спроектировать некоторую метрику / функцию стоимости / функцию оценки: вам нужно решить, какой критерий оптимизации как важно (что является своего рода психологической задачей или задачей, основанной на пробах и ошибках). Когда у вас есть эта функция, вы можете реализовать некоторые алгоритмы математической оптимизации ИЛИ работать над эвристикой, которая хорошо работает в отношении вашей метрики.   -  person sascha    schedule 20.11.2013


Ответы (1)


Я придумал что-то вроде этого (теперь также с кодом на github) https://mendrik.github.io/diorama/

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

Если ваш рост не фиксирован, есть несколько других вариантов, в основном ранца или алгоритмы разделения. Поддержка 2d bin оставит у вас пробелы или вы не сможете найти решения, которые всегда подходят ко всем изображениям.

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

person Andreas Herd    schedule 15.08.2014
comment
Андреас невероятно впечатляет. Работает невероятно хорошо. Мне неясно, были ли это: 1) какие-либо установленные алгоритмы, которые общедоступны, 2) какие-либо библиотеки с открытым исходным кодом, которые их реализуют, или 3) какие-либо другие математические ссылки или рекомендации. Нет проблем, если это 4) невероятно крутая демка. - person stanhope; 15.08.2014
comment
Справедливо. Удачи с этим. - person stanhope; 16.08.2014