https://github.com/zh217/torch-dct
DCT (discrete cosine transform) functions for pytorch
https://github.com/zh217/torch-dct
dct dft fct fft pytorch torch
Last synced: about 1 year ago
JSON representation
DCT (discrete cosine transform) functions for pytorch
- Host: GitHub
- URL: https://github.com/zh217/torch-dct
- Owner: zh217
- License: mit
- Created: 2018-09-20T16:38:15.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-11-06T16:09:00.000Z (over 3 years ago)
- Last Synced: 2025-03-31T00:13:17.033Z (about 1 year ago)
- Topics: dct, dft, fct, fft, pytorch, torch
- Language: Python
- Size: 24.4 KB
- Stars: 602
- Watchers: 5
- Forks: 72
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DCT (Discrete Cosine Transform) for pytorch
[](https://travis-ci.com/zh217/torch-dct)
[](https://codecov.io/gh/zh217/torch-dct)
[](https://pypi.python.org/pypi/torch-dct/)
[](https://pypi.python.org/pypi/torch-dct/)
[](https://pypi.python.org/pypi/torch-dct/)
[](https://github.com/zh217/torch-dct/blob/master/LICENSE)
This library implements DCT in terms of the built-in FFT operations in pytorch so that
back propagation works through it, on both CPU and GPU. For more information on
DCT and the algorithms used here, see
[Wikipedia](https://en.wikipedia.org/wiki/Discrete_cosine_transform) and the paper by
[J. Makhoul](https://ieeexplore.ieee.org/document/1163351/). This
[StackExchange article](https://dsp.stackexchange.com/questions/2807/fast-cosine-transform-via-fft)
might also be helpful.
The following are currently implemented:
* 1-D DCT-I and its inverse (which is a scaled DCT-I)
* 1-D DCT-II and its inverse (which is a scaled DCT-III)
* 2-D DCT-II and its inverse (which is a scaled DCT-III)
* 3-D DCT-II and its inverse (which is a scaled DCT-III)
## Install
```
pip install torch-dct
```
Requires `torch>=0.4.1` (lower versions are probably OK but I haven't tested them).
You can run test by getting the source and run `pytest`. To run the test you also
need `scipy` installed.
## Usage
```python
import torch
import torch_dct as dct
x = torch.randn(200)
X = dct.dct(x) # DCT-II done through the last dimension
y = dct.idct(X) # scaled DCT-III done through the last dimension
assert (torch.abs(x - y)).sum() < 1e-10 # x == y within numerical tolerance
```
`dct.dct1` and `dct.idct1` are for DCT-I and its inverse. The usage is the same.
Just replace `dct` and `idct` by `dct_2d`, `dct_3d`, `idct_2d`, `idct_3d`, etc
to get the multidimensional versions.