Tthresh
C++ compressor for multidimensional grid data using the Tucker decomposition
Install / Use
/learn @rballester/TthreshREADME
tthresh
TTHRESH: Tensor Compression for Multidimensional Visual Data
This is an open-source C++ implementation written by Rafael Ballester-Ripoll (rafael.ballester@ie.edu) of the compressor developed in TTHRESH: Tensor Compression for Multidimensional Visual Data (R. Ballester-Ripoll, P. Lindstrom and R. Pajarola). It is intended for Cartesian grid data of 3 or more dimensions, and leverages the higher-order singular value decomposition (HOSVD), a generalization of the SVD to 3 and more dimensions.
If you use TTHRESH for a scientific publication, please cite one or both of these papers:
- TTHRESH: Tensor Compression for Multidimensional Visual Data:
@article{BLP:19, Author = {Ballester-Ripoll, Rafael and Lindstrom, Peter and Pajarola, Renato}, Journal = {IEEE Transaction on Visualization and Computer Graphics}, Keywords = {visualization, data compression, volume rendering, higher-order decompositions, tensor approximation}, Title = {TTHRESH: Tensor Compression for Multidimensional Visual Data}, Volume = {26}, Issue = {9}, Pages = {2891--2903}, Year = {2019}} - Lossy Volume Compression Using Tucker Truncation and Thresholding:
@article{BP:15, year={2015}, issn={0178-2789}, journal={The Visual Computer}, title={Lossy volume compression using {T}ucker truncation and thresholding}, publisher={Springer Berlin Heidelberg}, keywords={Tensor approximation; Data compression; Higher-order decompositions; Tensor rank reduction; Multidimensional data encoding}, author={Ballester-Ripoll, Rafael and Pajarola, Renato}, pages={1--14}}
For more information on the Tucker transform and tensor-based volume compression, check out our slides.
Visual Example (click to enlarge)
"Isotropic fine" turbulence timestep (512x512x512, 32-bit float) from the Johns Hopkins Turbulence Database:
Download
git clone https://github.com/rballester/tthresh.git
(or as a zip file).
Compilation
Use CMake to generate an executable tthresh:
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
Usage
Compression:
tthresh -i <dataset> <options> -c <compressed dataset>
Decompression:
tthresh -c <compressed dataset> -o <decompressed dataset>
Compression + decompression (this will print both the compression rate and the achieved accuracy):
tthresh -i dataset <options> -c <compressed dataset> -o <decompressed dataset>
The target accuracy can be specified either as relative error (-e), RMSE (-r) or PSNR (-p).
Toy example:
A toy data set (a 3D sphere) is included in the data/ folder. You can test the compressor with it as follows:
tthresh -i data/3D_sphere_64_uchar.raw -t uchar -s 64 64 64 -p 30 -c data/comp.raw -o data/decomp.raw
Extra Features
- Use
-ato reconstruct only the data set's bounding box. - Use
-kwhen compressing a file to skip its k leading bytes. - Use NumPy-like notation immediately after
-oto decimate the data while decompression. For example,-o :: :: 0will reconstruct only the first z-slice of a volume,-o ::2 ::2 ::2will decompress only every other voxel along all dimensions, and-o ll4 ll4 ll4will perform Lanczos downsampling by a factor of 4. Some result examples for x2 decimation:
To get more info on the available options, run tthresh -h.
Acknowledgments
This work was partially supported by the UZH Forschungskredit "Candoc", grant number FK-16-012. I also thank Enrique G. Paredes for his help with CMake compilation issues.
Why Tucker?
Tensor-based compression is non-local, in the sense that all compressed coefficients contribute to the reconstruction of each individual voxel (in contrast to e.g. wavelet transforms or JPEG for images, which uses a localized DCT transform). This can be computationally demanding but decorrelates the data at all spatial scales, which has several advantages:
- Very competitive compression quality
- Fine bit-rate granularity
- Smooth degradation at high compression (in particular, no blocking artifacts or temporal glitches)
- Ability to downsample in the compressed domain
Related Skills
node-connect
352.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
