Remove 8x8-pixel "blocky" artifacts from a heavily compressed JPEG image.
make
./unblock in.bmp out.bmp
./unblock in.png out.png
This is a wrapper around an algorithm by John Costella. His webpage includes before-and-after pictures showing the algorithm's effectiveness.
Instead of porting John's C# source code to C/C++, I built on Alexander Balakhnin's C port, in the context of a plugin for AviSynth, based on John's own 2007 C port of "the Costella libraries."
Files in .bmp format are read and written by EasyBMP,
files in .png format by libpng.
Why not .jpg for a JPEG utility?
Because my source images are still frames from mjpeg-format video.
Extracting frames in a lossless format avoids the further degradation that happens with
ffmpeg -i in.avi -vcodec jpg ...
.
The article Stitched Panoramas from Toy Airborne Video Cameras (arXiv:1311.6500 [cs.CV]) demonstrates an application of this software. A summary of this article is published in the MIT Technology Review.
Bugs
< 4E44 a id="user-content-bugs" class="anchor" aria-label="Permalink: Bugs" href="#bugs">An image whose width is not a multiple of 16 pixels may misbehave.