Использование кодирования Хаффмана для сжатия изображений, снятых камерой iPhone

Я думаю использовать кодировку Хаффмана, чтобы сделать приложение, которое делает снимки прямо с камеры iPhone и сжимает их. Сможет ли аппаратное обеспечение справиться со сложными вычислениями и построить дерево? Другими словами, выполнимо ли это?

Спасибо


person inzo    schedule 27.07.2017    source источник
comment
iPhone становится все более и более мощным, поэтому все зависит от того, насколько большие изображения вы ищете и какую базовую скорость вы устанавливаете. Взгляните на эту реализацию, и вы можете попробовать профилировать скорость для себя: raywenderlich/swift-algorithm-club   -  person Todor Brachkov    schedule 27.07.2017


Ответы (2)


Если вы имеете в виду файлы изображений (такие как jpg, png и т. д.), то вы должны знать, что они уже сжаты алгоритмами, специфичными для изображений. Полученные файлы не будут сильно сжаты Хаффманом, если вообще сжаты.

Если вы имеете в виду, что собираетесь взять необработанные пиксельные данные UIImage и сжать их, вы можете это сделать. Я уверен, что iPhone справится с этим.

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

  1. Очень маловероятно, что Хаффман будет лучше, чем стандартное сжатие изображений, используемое в JPG, PNG и т. д.

  2. Apple уже увидела необходимость в улучшении сжатия и реализовала HEIF в iOS 11. Видео HEIF

  3. Они проделали большую работу в приложении ОС и Фото, чтобы убедиться, что HEIF используется локально, но если вы поделитесь фотографией, она превратит ее во что-то, что может использовать каждый (например, JPG).

  4. Все сжатие, которое они реализуют, использует аппаратное ускорение. Вы тоже можете это сделать, но код намного сложнее, чем Хаффман.

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

person Lou Franco    schedule 27.07.2017
comment
Спасибо @Лу. Ваш ответ очень полезен - person inzo; 27.07.2017

Есть 2 части, кодирование и декодирование. Процесс кодирования включает в себя построение дерева или табличного представления дерева. Процесс декодирования включает в себя чтение байтов кодирования Huff и отмену дельты. Вероятно, было бы трудно получить значительное преимущество в скорости кодирования по сравнению с PNG, но для декодирования очень эффективное ускорение можно увидеть, перенеся логику декодирования на графический процессор с помощью Metal. Вы можете посмотреть полный исходный код примера, который делает именно это для изображений в градациях серого, на github Metal Huffman.

person MoDJ    schedule 23.12.2017