These are basically elaborations of some of the more involved projects
that I posted in the problems section of the course notes.
I will be happy to discuss any of these with you in detail.
1. Write an LZW compressor-decompressor system. Your program should use a dictionary of 4096 entries and emit twelve bits to the output file every time the index of a dictionary entry is output. As a preliminary step, you can begin with the version of this project described in the notes, where you simply output the dictionary index as an integer and keep track of how many times the compressor writes output, which will enable you to see how well the program is compressing without actually producing the compressed file. You should be able to reconstruct the original file from the sequence of indices. The next step is to output 12-bit sequences instead of integers for each dictionary index, so that you have a true file compressor.
If you use this to compress a large file, eventually the dictionary will become full. There are several different strategies for handling this situation. One is to flush out the dictionary when it becomes full and begin again with a dictionary of 128 or 256 entries. You will have to revise the decompression routine acccordingly.
If you get this to work, pay attention to how much compression is achieved. If it works well, the number of bits per character in the compressed file can even be less than the first-order entropy.
2. Write a Fourier-based compression-decompression system for audio. The basic idea is described in the notes---find the Fourier transform of the samples, quantize, and compress the result with a lossless compressor, such as the UNIX compress utility. The only loss of information in the process occurs in the quantization step.You should find that you get a significant amount of compression, much more than you would obtain if you just applied UNIX compress to the original audio file.
For more lossy compression, which may preserve the perceptible quality of the sound, try eliminating the lowest-magnitude components of the transform. For musical sounds, you can eliminate 90% of the transform values before quantization with very little perceptible difference in the sound quality, at least for our8-bit WAV files with 11KHz sampling rate. Decompression consists first of undoing the lossless compression phase (UNIX uncompress), and then computing the inverse Fourier transform.
3. Apply the ideas of Project 2 to image compression, using the two-dimensional Discrete Fourier Transform.
4. Same as 3, but use the Haar wavelet transform.
5. Learn about the Daubechies wavelet transforms, and use them to implement an image-compression scheme.
6. Learn about fractal image compression....