Introduction
To check the behavior and properties of fuzzy image compression, the FIC, Fuzzy Image Compression tool has been developed. This tool is used to process the forward and inverse discrete fuzzy transform and to compare result of the resource image with the original one. The tool is developed for .NET Framework 2.0 and Windows operating system.
The fuzzy transform is implemented via C++ language and is used as internal part of the whole software. It contains set of methods offering ant interface to process forward and inverse fuzzy transform over the set (that means array) of values.
The .NET framework application is responsible for graphical user interface and high-level operations with images (e.g. image loading, analysis and reconstruction set of pixels and so on). Analysed image (represented by set(s) of pixels) are passed as arguments into the C++ library; returned value is taken and reconstructed image is constructed. It also computes all characteristics about the process.
The main purpose of the application is to process designed algorithms over real images, analyse its behavior and properties. Many of improvements in the origin algorithm has been made and they have been tested using this tool.
Main principles
The usage of the tool is as follows. It takes an image in a known image format (GMP, JPG and PNG formats are now supported), transforms it into a set (or sets) of pixels represented in byte array. This array is passed into forward the fuzzy transform and set of components is obtained.
This set of components, with next neccessary info, will be stored in the image file (this part is not implemented yet).
In the reconstruction, the set of components and other info is taken (e.g. image size and color mode) and again passed as an byte of array into the inverse fuzzy transform; array of pixels of the reconstruction is returned. Finnaly, software creates a reconstructed image from those data and display it to compare with the origin.
This description fits on the grayscaled images - source data are represented by the array of grayscale pixels of the image. However, using color images the situation is analogous, the only difference is that inputs are three source arrays. They depend on the selected algorithm type, but only two kinds of model are used: R-G-B model and Y-Cb-Cr model. Then each model component is passed separately into the algorithm and therefore, the algorithm runs three times longer than in case of a grayscale image.
During research, many of the algorithm improvements has been made. Only the most important are selectable in the application (as described below). The share one most important parameter for fuzzy transform, internally called "points per base" (ppb for shortcut) - this number represents, how many pixels are covered by one component. The higher the value, the lower total number of the components and smaller compressed image, but also higher deformation of the reconstructed image. They are:
-
Basic algorithm via fuzzy transform - this one is the most simple algorithm. It only takes an array of grayscale set of pixels (or R-G-B components for colour images) and passes them into the forward and inverse fuzzy transform. No improvements here have been made. The whole source is taken as one array (or one array per color-component for colour images); image rows are joined into one "row", so the transform is only one-dimensional.
-
Basic 2D transform - is the same as the previous example. The main difference is that 2D transform is used. So rows are no more joined into one data array, but two-dimensional matrix is passed into the forward transform.
-
1D fuzzy transform with split-value per ppb interval - as mentioned in the underlying article about the fuzzy transform applications in image processing, the weakest point of the fuzzy transform are sharp edges in the image. This metod is aimed to improve this behavior. In the image there is pre-processing to find the sharp edges in the image. Then, for those edges there are two components used instead of one. The "lower" component is used to describe values from 0-126, the "upper" one is used to describe values from 127-255. This improves the behavior of the process.
-
1D fuzzy transform with split-value per ppb interval and pre-bit for usage - this method is almost the same as the previous one. The only difference is in components result; components are joined with flags to define where splitting was used, it helps to estimate the total size of data necessary to store.
-
1D fuzzy transform with splitting image size - this method is something different from the previous ones. It takes whole image as a whole part and try to find if there are significant differences in the area. If so, the source is divided into halfs and again analysed. This action is called recursivelly until the parts with no significant difference is found or until the part is too small. Then, each part is processed via the fuzzy transform. The reason to do so is to find parts, which are similar (that means which do not contains big changes inside) a and cover them with fixed number of components. For example, if image is contained of big blue sky and some differend color objects at the bottom, the whole blue sky (it can be more than 50% of the image) are compressed via fixed number of components (e.g. 8). The rest of image is compressed commonly. This method is not (instead of previous ones) using "points per base" parameter. It has new meaning here and represents minimum part size (as number of pixels).
-
Basic algorithm via fuzzy transform with variable ppb number - this method is again different. It is aimed to reduce number of components used to describe values, which are not significat for human sences. It is aimed to colour images only (it has no meaning to use it on the grayscaled images). The image is divided into source data arrays (according to used colour model, R-G-B or Y-Cr-Cb(YUV)). Each of the array is then processed via the fuzzy transform, but with different value of "points per base" parameter. The more significat data are compressed with higher number of resulting components (e.g. red color, or Y-part), the less significant data are compressed with lower number of resulting components (e.g. blue color, or V-part).
Program usage
The program have not to be installed, it can be just copied into target location with all files from the package. The program requires installed Microsoft .NET Framework 2.0 Redistributable package (free download from Microsoft pages) or whole Microsoft .NET Framework 2.0.
After execution, the program shows the main program file, which consists of four basic tabs:
-
Source - this tab show info about the file selected to process. It offers two buttons. Button "Open image" is to select and open an source image which will be later processed. The button "To grayscale" converts currently opened image into grayscaled image (this change does not affect the source file, just only the copy opened in the program!). Two textbox on the right size show info about Image size and total number of pixels.
-
Target - this tab show main two drop down lists. First is used to select method of the process - methods was already described in the "Main principles" section. Second dropdown list allows to select comprimation method used over the result data. It is used only to have estimation about the compress ration and will not correspond to final version of saved files. On the right there is panel to set propertis affecting the transformation process. Description about each property is located below this panel. The property panel changes accordingly to selected method. The main button "Apply" will start the transformation process. Button "Save result" will save reconstructed image to the file.
-
Info - this tab show information about application and transformation process as a text.
-
Stats - this tab show statistics about last transformation run. Content of this tab is generated iif option "Calculate statistics" is marked as "True" in properties panel in the tab Target.
Related links:
Research reports
[1] Research report 119. Irina Perfilieva, Viktor Pavliska, Marek Vajgl, Bernard De Baets: dvanced Image Compression on the Basis of Fuzzy Transforms, 2008. Download Report 119.
[2] Research report 89. Irina Perfilieva, Radek Valášek: Fuzzy Approach to Data Compression, 2005. Download Report 89.