Нужно предложение по структуре данных цветовой палитры для итеративного квантования цвета; в частности, есть ли опыт работы с кучами KD?

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

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

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

Тем не менее, что-то, что по своей сути работает в структуре, подобной массиву, было бы даже лучше, поскольку это было бы более дружественно к кэшу ЦП. Итак, я наткнулся на кучи KD. Вот краткая статья в Википедии и вот статья об этом. Основная идея, по-видимому, заключается в расширении свойства кучи, и это заставит его работать внутри массива. Итак, это звучит идеально, поскольку кучи обычно реализуются с помощью массива. Но я никогда не использовал кучи KD, поэтому не уверен, есть ли какая-то загвоздка.

Итак, стали бы вы использовать кучи KD для поиска ближайшего подходящего цвета в цветовых палитрах? Если нет, то какую другую структуру данных вы бы порекомендовали, которую можно построить быстро и эффективно?

(«Создание» здесь означает, что вся структура данных палитры строится одновременно со всеми значениями цвета, они не добавляются по одному.)


person dv_    schedule 18.08.2019    source источник
comment
для чего именно вам это нужно? описание инкрементной палитры звучит как проблема XY. Взгляните на это: Эффективное квантование цвета gif/изображения? это также итеративно, но нет необходимости хранить странные структуры предыдущая палетка...   -  person Spektre    schedule 19.08.2019
comment
Если бы мне пришлось делать это так, как вы говорите, я бы использовал дерево KD, упакованное в массив, чтобы мне не нужно было хранить какие-либо указатели... Но вы уверены, что между новым и старым нет связи? версии палитры, которые позволили бы вам более эффективно перераспределять цвета?   -  person Matt Timmermans    schedule 20.08.2019


Ответы (1)


Оказалось, что я слишком сложно мыслил. Кроме того, в другом месте была ошибка, которая резко повлияла на производительность. Дерево K-D, упакованное в массив, работает нормально, а с исправленной другой ошибкой все в порядке.

person dv_    schedule 16.09.2019