Skip to main content

Discrete Cosine Transform in PyTorch

Project description

DCT-Autoencoder

A PyTorch-based implementation of a 2D Discrete Cosine Transform (DCT) autoencoder for RGB images.

PyPI version

Overview

dct-autoencoder is a non-trainable, analytically defined autoencoder that reproduces the core ideas behind JPEG compression:

  1. Convert RGB to YCbCr to separate luminance from chrominance.
  2. Partition each channel into non-overlapping blocks and apply the 2-D DCT via strided convolution.
  3. Optionally zero high-frequency coefficients for lossy compression.

The transform is fully differentiable and integrates cleanly into PyTorch pipelines. Encoding is lossless by default; compression is opt-in at construction time.

Project structure

dct-autoencoder/
├── src/dct_autoencoder/       # Package source
│   ├── __init__.py            # Public API exports
│   ├── basis.py               # DCTBasis, get_dct_basis()
│   ├── core.py                # DCTAutoencoder (nn.Module)
│   └── utils.py               # RGB ↔ YCbCr conversions
├── notebooks/
│   ├── quick_start.ipynb      # Minimal getting-started example
│   ├── full_tutorial.ipynb    # In-depth walkthrough
│   ├── visualization.py       # DCT basis-function plotting helpers
│   └── test_images/           # Sample images for notebooks
├── assets/figures/            # Diagrams and figures
├── pyproject.toml
└── README.md

Installation

Requires Python 3.12+.

1. Install PyTorch

Install PyTorch and torchvision first, following the official PyTorch installation guide. Choose the build that matches your hardware (CPU, CUDA, ROCm, etc.).

2. Install this package

Then install dct-autoencoder from PyPI:

pip install dct-autoencoder

The package depends on NumPy; PyTorch is required to use DCTAutoencoder but is not bundled so you can pick the correct build for your system.

Development setup

This project uses uv for dependency management:

git clone https://github.com/dariush-bahrami/dct-autoencoder.git
cd dct-autoencoder
uv sync --group dev

Quick start

import torch
from dct_autoencoder import DCTAutoencoder

model = DCTAutoencoder(
    block_size=8,
    num_luminance_compressed_channels=10,   # optional low-pass on Y
    num_chrominance_compressed_channels=5,  # optional low-pass on Cb/Cr
)

# Input: (batch, 3, H, W), values in [0, 1]; H and W must be divisible by block_size
images = torch.rand(1, 3, 256, 256)

encoded = model.encode(images)
compressed = model.compress(encoded)
reconstructed = model.decode(model.decompress(compressed))

Public API

Symbol Module Description
DCTAutoencoder core Encode/decode RGB images; optional frequency-domain compression
DCTBasis basis Named tuple of precomputed DCT basis data for a block size
get_dct_basis basis Build a DCTBasis for a given block size

Notebooks

Notebook Description
notebooks/quick_start.ipynb Minimal example: load an image, encode, compress, decode
notebooks/full_tutorial.ipynb Full tutorial covering math, API details, and interactive exploration

Visualizations

Computation graph

Computation Graph

DCT basis functions

DCT basis functions for a block size of 16:

DCT Basis Functions

You can regenerate basis-function plots locally with notebooks/visualization.py and get_dct_basis().

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dct_autoencoder-0.4.0.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dct_autoencoder-0.4.0-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

Details for the file dct_autoencoder-0.4.0.tar.gz.

File metadata

  • Download URL: dct_autoencoder-0.4.0.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for dct_autoencoder-0.4.0.tar.gz
Algorithm Hash digest
SHA256 6f605358abb20508f0e6c74d015239bfe78af30136b37f7ef692721840998d30
MD5 300d738787316dde5d09ad604ad44a0e
BLAKE2b-256 827526ad7fd53a8d3ab4ad1d3840b30e05952fbba5124c6a3aaf9eebb292347a

See more details on using hashes here.

File details

Details for the file dct_autoencoder-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: dct_autoencoder-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 7.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for dct_autoencoder-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 00797085d9c389627726ef395d539a8c86e6f6455e57dee0ca764ce4093da940
MD5 cf23cdab5d214c3ef757cdc9e1f44454
BLAKE2b-256 258b5ff226a15e391c468a2405c4fcae13ee6a8e8768e829b767c54c7b6c1b57

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page