Adam Tobey
This is a Java implementation of an experimental image processing algorithm. The algorithm is designed to analyze a JPEG-compressed image that has been convolved by an image manipulation filter such as a Gaussian blur and attempt to reduce the effect of quantization error in reversing the convolution. It does this by constructing error bounds for the compression based on the quantization tables of the compression algorithm and then projecting and normalizing the solved JPEG blocks into the acceptible bounds in the discrete cosine transform domain. This projection and normalization has the effect of redistributing the weights of the samples in the frequency domain, where the error is additive because quantization occurs in the frequency domain as well, and then use those weights in the inverse solution to minimize the solution's dependence on frequency components with larger error. This technique is similar in principle to quantization in the frequency domain as well as prior attempts at this problem because it uses the principle that small shifts in frequency distribution are visually difficult to percieve but may treat the data in a way that is suitable for processing.
This algorithm is written as a library exposing the 'deconvolve' method, which takes image data as a matrix, an array of quantization blocks, and the kernel used for the convolution to reverse. However, the algorithm relies on data that is encapsulated in the JPEG implementation, the canonical version of which is implemented as a C library. The C library is difficult to interface with in practice, which is why this is implemented with low-level datatypes such as int arrays.