Кто знает когда image mosaic делают как подбирают цвет точки

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

4 ответов

11 просмотров

Пример картинки покажите, чтобы иметь представление о том, чего хотите достичь. Где там квантизация, не очень понял? Вы можете подбирать картинки каким-то таким алгоритмом: У вас есть некое поле потенциалов - какие-то компоненты, например яркость, или цвет, или компоненты цвета. Приспособив элемент мозаики на какое-то место, вы вычитаете поле потенциала наложенной картинки из поля потенциала целевой картинки, приведя картинки к общим координатам. В итоге нужно достичь нулевого потенциала (ну или приблизиться к нему). Этим можно обеспечить общий балас освещенности и цветовой тоже, что и будет означать, что вы составили мозаику, и что целевое изображение считывается глазом. При этом, вы можете достич нулевого потенциала в каком-то ограниченном диапазоне частот, если перевести изображение в частотный диапазон. Если использовать жадный алгоритм, то картинки, поставленные позже, будут хуже подходить в любом случае. Можно применить какую-то стохастическую оптимизацию, типа SA иди GA, и использовать в качестве cost-функции потенциал поля.

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

Joric- Автор вопроса
George Polevoy
Пример картинки покажите, чтобы иметь представлени...

типа вот https://joric.github.io/viva-games/ только я хочу сам мозаику посчитать т.к. надо pixel-perfect а утилиты существующие такой размер не держат. каждая точка это усредненный цвет тайла. я бы просто квантизацию сделал в PIL но мне нужно каждый цвет палитры использовать ровно один раз. жадный алгоритм тут не годится, будет плохо выглядеть.

Joric
типа вот https://joric.github.io/viva-games/ тольк...

Ну это выглядит намного проще. Тут просто суммарный цвет картинки складывается в один пиксель. Ищем для каждого пикселя ближайшую картинку. Делаем это в рандомном порядке, и получается естественным образом dither. Но для сохранения баланса яркости и цвета нужен тот же принцип - поле потенциалов. Суть в том, что если мы для пикселя взяли ближайшее, оно вме равно не будет точным, поэтому потенциал нужно компенчировать соседними пикселами. Тогда при дальнейшем подборе соседей, подберутся уравновешивающие картинки.

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

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Карта сайта