An open source library written in Java, implementing the concepts of fractal image compression, along with a simple implementation — a proof of concept application.
input image → partition sheme → output image
The project's goal, is to provide a reusable, free and open source library for fractal compression of images. Along with the library, comes a small application, indicating the library's usage and serving as an example and proof of concept of the ideas behind fractal compression.
Fractal compression is a lossy compression method for digital images, based on fractals. The method is best suited for textures and natural images, relying on the fact that parts of an image often resemble other parts of the same image.
For the documentation refer to the javadoc.
Usually, images are expensive, especially when the quality is greater than needed. Compression is, in almost every case, necessary. Databases holding thousands or millions of images, or network data transfers, can benefit from different compression schemes, in terms of less storage space needed and less data to transfer over the wire, less bandwidth consumption and thus more efficient and faster browsing and less cost and charges by web hosting services.
Lossy compression schemes, such as fractal compression, can be used for images, that need not great detail and quality, like landscapes, but not medical images. Low bandwidth and few resource systems can benefit by lossy compression schemes, as they process less data, whereas big volume data would result to delays and greater chance or increased error rates or even deformation of data.
» Fractal compression features
There have been attempts of using fractal compression in the business and open source community in the past.
Historically Michael Barnsley led development of fractal compression in 1987 and was granted several patents on the technology. This made it difficult for developers to experiment and grow the interest on the technology, and thus not many project exist today based on the fractal compression scheme. Michael Barnsley and Alan Sloan formed Iterated Systems Inc. which was granted over 20 additional patents related to fractal compression.
The most widely known and successful implementation of fractal compression is by onOne Software company, which developed a fractal compression scheme (under the Iterated Systems Inc. license) as a Photoshop plugin. Another successful real world usage of fractal compression is by Microsoft in its Encarta multimedia encyclopedia, also under license.
In the Open Source world, Ullrich Hafner developed a library called Fiasco. It is now used by the Netpbm library and toolkit. Femtosoft provided another example implementation.
Numerous research papers have been published during the past few years discussing possible solutions to improve fractal algorithms and encoding hardware.
Kanakarakis c00kiemon5ter Ivan:
System Architect, library and application design and component logic separation. Supervision and implementation of components and communication between them.
Implementation and design of various components, mostly focused on image block comparison.
Implementation and design of various components, mostly focused on affine transformations.
Every member contributed in the research conducted for the project, the preparation of the presentations and reports.
This project is one of the few available freely and open source, dealing with the concept of fractal compression for images.
The applications' workflow, is quiet simple. The application expects configuration arguments such as the tile size, the initial scale factors, enabling of debug information and others, to set its internal state and a command along with a file as input. There are two commands: compress and decompress. In case of compress, the expected file should be an image. In case of decompress, the expected file should be a compressed file as resulted by the compression step.
Once the application initializes its state, it reads the image and starts the compressor. The compressor splits the image into tiles (segmentation step) and proceeds to compare each tile with every other part of the image after transforming the image with a set of selected transforms. The blocks that match most, are kept linked along with the transformation that has been applied. The end result is a list of tiles which are linked to a list of transforms, each of whom is linked with a list of points in the original image, that, applied to the tile that's linked to them, the result represents that part of the original image.
Decompression works the same way. The application reads a compressed file, as generated by the compression step, and forms back the original image.
Typical timings for compression is about 3min and less than a second for decompression.
Input image (top, colored) and results (bottom)
for tiles of
Fractal Image Compression is a much promising and still young technology that can fit well in many areas of the multimedia systems' world. Despite the great compression time, the benefits of compression and resolution independence are much broader (for example, mapping services like google maps)
The project isn't finished. There are many things to experiment and play with.
The base is here and everyone can join and expand the limits.