Вопрос или проблема
У меня есть два двумерных массива целых чисел. В основном эти целые числа являются значениями пикселей изображения FITS. Я хотел бы применить легкие безубыточные техники сжатия, такие как подавление нулей (SIMD-BP128) и т.д. к файлу FITS.
Я хочу знать, какие библиотеки доступны на C/C++, которые я могу использовать для применения этих техник сжатия.
Компания, в которой я работаю, имеет библиотеку для работы с изображениями LEADTOOLS C/C++, которая поддерживает сжатие изображений в различных форматах, включая более одного типа безубыточного сжатия. Библиотека поддерживает загрузку и сохранение изображений FITS. Вы можете использовать ее для загрузки несжатого изображения FITS, а затем сохранить его в другом формате, который использует безубыточное сжатие, таком как PNG, TIFF/LZW или даже безубыточный JPEG (который является допустимым, но не очень распространенным форматом, так как обычный JPEG является сжатым с потерями).
Если вы хотите попробовать, на этой странице есть бесплатная оценка.
Ответ или решение
При работе с двумерными массивами целых чисел, представляющими собой значения пикселей изображений в формате FITS, важно выбрать подходящие библиотеки для сжатия данных. В данной статье мы обсудим несколько библиотек на языке C/C++, которые могут помочь в реализации легковесных алгоритмов без потерь, таких как нулевая установка (null suppression) и SIMD-BP128.
1. LEADTOOLS
LEADTOOLS предоставляет мощный SDK для работы с изображениями, в том числе и поддерживающий формат FITS. Данная библиотека позволяет загружать не сжатые изображения FITS и сохранять их в других форматах, использующих безлопастные компрессии, таких как PNG и TIFF с LZW-кодированием. Это может быть полезно, если вам нужно быстро и эффективно сохранять изображения, соблюдая при этом целостность данных.
Преимущества:
- Поддержка множества форматов изображений и методов сжатия.
- Профессиональная документация и активное сообщество.
- Возможность оценки функции перед покупкой.
Ссылка: LEADTOOLS SDK
Пробная версия: LEADTOOLS Downloads
2. Zlib
Библиотека Zlib является популярным выбором для сжатия данных и широко используется в различных приложениях. Она предлагает алгоритм DEFLATE, который может быть эффективен для сжатия двумерных массивов данных. Вы можете реализовать сжатие с помощью Zlib непосредственно для массива целых чисел, сохраняя при этом высокую степень сжатия.
Преимущества:
- Высокая степень сжатия и скорость выполнения.
- Простота интеграции и использования.
Ссылка: Zlib
3. LZ4
LZ4 – это библиотека сжатия, которая славится своей скоростью и эффективностью. Хотя она не предназначена для достижения максимального уровня сжатия, LZ4 предоставляет хорошие результаты благодаря высокой скорости сжатия и разжатия. Это может быть отличным выбором, если скорость имеет первостепенное значение.
Преимущества:
- Очень высокая скорость сжатия.
- Простота интеграции и использование.
Ссылка: LZ4
4. Brotli
Brotli – это современный алгоритм сжатия данных, который разработан Google. Он обеспечивает сжатие с хорошей степенью эффективности и может быть применен в различных сценариях, включая изображения. Библиотека также доступна для интеграции в C/C++.
Преимущества:
- Высокая степень сжатия и эффективность.
- Отличные результаты при сжатии текстовых и двоичных данных.
Ссылка: Brotli
5. SIMD-BP128
Если вы хотите реализовать специфические алгоритмы, такие как SIMD-BP128, необходимо самостоятельно написать часть кода, используя библиотеки SIMD (например, Intel Intrinsics) для оптимизации производительности. Однако в контексте более общих библиотек, вам следует изучить специализированные библиотеки сжатия, настроенные под конкретные алгоритмы.
Заключение
Выбор библиотеки для сжатия двумерных массивов целых чисел в формате FITS зависит от конкретных требований вашего проекта — будь то скорость, степень сжатия или простота интеграции. LEADTOOLS предоставляет готовое решение, тогда как Zlib, LZ4 и Brotli предлагают гибкость для ваших нужд в сжатии. Не забудьте про важность тестирования производительности и качества компрессии для вашего случая использования.