Take the fourier transform of the entire image. Process the image so that (1) resolution is reduced (i.e. blurred) and (2) the image is sharpened. Your code must conform.
Perform the tasks (1) and (2) in wavelet domain (instead of fourier domain). Use Haar wavelets, for simplicity. The things to put into the report are the same things, plus a short description of your implementation of DWT. The invocation of your program will be similar. (see: Implementation Issues) (Hint: You can find links to useful tutorials athttp://www.wavelet.org/)
Images are in two classes; natural scenes and artificially generated shapes. All images are 8-bit grayscale PNG, no limitation in size. Two other images will be used for evaluation, which you won't see before I evaluate your assignments.
The given sample images is the common subset of evaluation images. Other two images may (or may not) be common, but they will certainly conform to the specification above.
Your programs has to output some image, otherwise it'll make a zero! You'll be requested a demo in case your program(s) fail to output an image. Your performance will be determined by the (of course) quality of your output and to be measured qualitatively. Three of the five test images are provided in this page; the `hidden' two others are chosen to be similar to the public ones in characteristics.
For the transform-domain quantization part, the weights of the three important factors that affect your grade (RMS error, perceptual quality, size ratio) will be announced later.
Your programs will be executed on a RedHat 6.x linux machine, one of the ineks, exactly speaking.
Your program will get 8-bit grayscale images and output in the same format. For (1), your code must be invoked as
./main input.png output.png plugin1.so --blurand for (2), your code must be invoked as
./main input.png output.png plugin1.so --sharpen
For the wavelet section, invocation is the same as above, just change plugin1s with plugin2
Your program will get a grayscale 8-bit image and output a 16-bit image, where every 16-bit value is the quantized value (which is real) transformed (into 16 bit world), you must define a transformation from reals to 16-bit (unsigned) integers so that you won't need any description of a quantization table. By mapping your complex double or float coefficients, you may lose a lot, you at least do the 64/128 --> 16 bit transformation.
You may use a fixed quantization table, which will get more points given the quality is the same, or generate your quantization scheme for each image you are given. The difference in size will affect your grades, i.e. the smaller you encode, the more you get. On the other hand, you'll probably lose some details by quantizing the image, which means you'll get less.
To view the image, you must also write the decoder. Encoder and decoder must be the same plug-in. To encode a picture, the plugin must be invoked as
./main input.png output.png plugin3.so --encodeand to decode the image, it must suffice to enter
./main input.png output.png plugin3.so --decode