Tuesday, October 27, 2026

Neural JPEG artifact reduction in C++

Designed to be trivial to drop into any program, it filters an already decoded 32bpp RGBA JPEG image. A little helper is provided to extract the DCT quality factor, which is also fed into the MLP:

https://github.com/richgel999/jpegc_deblock

The model's ~2.2k weights are in a single header. It was trained on an RTX 5090, using libjpeg with a custom training engine.
"A 7x7-window MLP (52 inputs: the luma window as differences from the centre, the centre's luma, the 8x8 block phase, the quality factor; hidden 32 and 16, leaky ReLU; one linear output) that predicts a luma correction added to R, G and B, equivalent to a Y-only correction in YCbCr. Trained by finite differences on 514 PNGs round-tripped through baseline JPEG at qualities 30..95. On held-out images it gains about +0.95 dB luma PSNR at quality 30, +0.9 at 40, +0.7 at 80. About 20 Mpx/s on 32 threads, 1.6 Mpx/s on one."

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.