#android #performance #algorithm #color-palette #quantization
#Android #Производительность #алгоритм #цветовая палитра #квантование
Вопрос:
Я использую алгоритм квантования NeuQuant (https://code.google.com/p/android-gif-project/source/browse/trunk/GIFproject1/src/com/ui/NeuQuant.java?r=5 ), чтобы уменьшить jpeg до 256-цветного изображения, но это очень медленно (~ 1 секунда для изображения 320×240, ~ 3 секунды для 640×480). Даже с несколькими потоками я не могу довести время обработки до приличного уровня (в идеале в диапазоне 100 мс на изображение).
Кто-нибудь знает более быстрый алгоритм для уменьшения цветовой палитры изображения до 256 цветов?
Комментарии:
1. Что-нибудь новое в этом?
2. Я нашел более быстрый алгоритм (медианный разрез), но изображения выглядят ужасно после обработки. Итак, я закончил многопоточность neuquant
Ответ №1:
Извлечение 256 цветов — это своего рода крайний случай, но вам следует взглянуть на квантование медианного среза. Вот реализация: ссылка на github
Другой вариант — octree.
Вам действительно следует использовать оба решения и искать способы их улучшения.
Кроме того, запуск алгоритма с помощью RenderScript может позволить вам значительно ускорить его.
Ответ №2:
Быстрый алгоритм на основе попарного ближайшего соседа, создающий высококачественные 256 цветных 8-битных изображений PNG, минимизирующий потерю цвета для фотографий с красными губами и поддерживающий 256 или менее цветов с прозрачностью. Временная сложность метода равна O (N log N).
Демонстрационный проект Android написан на Java, с помощью нажатия кнопки для преобразования образца изображения в 256 цветов напрямую. ссылка на github