The Goal
The goal of this project is to compress an image in parallel using a cluster of workstations. The image(s) to be compressed are gray scale with pixel values between 0 and 255. There are different techniques for compressing images. They are broadly classified into two classes called lossless and lossy compression techniques. As the name suggests in lossless compression techniques, no information regarding the image is lost. In other words, the reconstructed image from the compressed image is identical to the original image in every sense. Whereas in lossy compression, some image information is lost, i.e. the reconstructed image from the compressed image is similar to the original image but not identical to it. In this project we are using lossless compression, parallell lossless differential pulse code modulation.

Extra Features

There are two extra features to this program. I have added an image multiplier so that an image of any size can be created. I have also created an application to draw the image so I don't need to use Matlab. The image drawer can be run using the imagedrawer bash script. It currently only supports Linux with GTK.

Multiplying an Image
You can multiply the size of an image using the Image Multiplier. The source/application are in the Downloads section as well as the related files for this project. To use it, simply get the source and run make. Then execute the command image_multiplier. The usage for the image multiplier is as follows:
./image_multiplier [read file] [write file] [image size] [multiplier]

Running a Compression

There are several ways to run compression on an image. The first way is to do a make all. This will rebuild the project and run a compression with 2 processors on a 256x256 image. The second way is to create a *.pbs file that looks like the following:
--
#!/bin/bash
#PBS -N assignment1-2-256
#PBS -l walltime=0:05:00
#PBS -l nodes=2
#PBS -q
@nic-cluster.cc.umr.edu
/usr/bin/mpiexec -mpich-p4-no-shmem $HOME/cs387/project1/driver $HOME/cs387/project1/data1.256 256
--
The best way to run a single script is to use the run_builder script. The run builder script creates a pbs file like the one above. For example, if you wanted to run the above script with the run builder all you would type is./run_builder 2 256 | qsub.

Running a Series of Compressions




Release Status
Curently in development: 1.0 Alpha

Version 1.0 Alpha Progress

100%
100%

There are a total of 18.00 completed units for this project. There are 18.00 units expected for this major version.

Features

Technologies Used
C
C++
Java


Screenshots
grayscale_image_drawer_initial grayscale_image_drawer_1024 1024_tiled_to_2048 256_tiled_to_2048 floodqueue