Mipmap Generator 2D Manual

From Immersive Visualization Lab Wiki
Revision as of 00:25, 2 April 2008 by Kuhsu (Talk | contribs)

Jump to: navigation, search

Generate mipmaps for 2D images.

Contents

Synopsis


./MipmapGen2D [-f format -s brickSize] imageFilename maxLevel
./MipmapGen2D [-f format -s brickSize] inputBatchFilename maxLevel [outputBatchFilename]

Description


1. Generate mipmaps for an image:
Generate mipmaps for an image specified by imageFilename, from level 0 (the original image size) to the level specified by maxLevel. If the maxLevel is -1, MipmapGen2D generates all the mipmaps from the original image size to the biggest size smaller than the brickSize.
2. Generate mipmaps for a set of images:
Generate mipmaps for a set of images listed in the inputBatchFilename</u>, all from level 0 (the original image size) to the level specified by maxLevel</u>.
If outputBatchFilename is specified, MipmapGen2D assumes the image set is an animation, and generates a single text file which lists mipmaps for each frame and timestamps. If outputBatchFilename is not specified, it’s the same as a batch mipmaps generation. MipmapGen2D generates mipmaps and a text file for each image in the set, as if they are generated separately.

Options


-f format
Specify file format for the output mipmaps. Default is mix.
sep
Save all pixels of a channel together, i.e. RRR…R, GGG…G, BBB…B
mix
Save channels of one pixel together, i.e. RGB, RGB, RGB…RGB
-s brickSize
Specify the brick size. Default is 128.

File format


Mipmaps

For each mipmap level of an image, we divide the output mipmap into fixed size bricks (Fig. 1), and save all the bricks of one mipmap level to one file.
MipmapGen2D fig1.jpg
Fig. 1
To access all data for one brick in one file I/O, we put all the pixels of one brick together. In addition, to simplify the calculation for file pointer offset of one certain brick, we save those bricks one by one continuously (Fig. 2). The output mipmaps are not human readable. However, if the TIFF format is used, one can view bricks by TIFF’s sub-image.
MipmapGen2D fig2.jpg
Fig. 2

Text Files

1. Output text file
The output text file for a single input image contents the image definition, and file paths for all the mipmaps.
Sample file (a line starts with ‘#’ is a comment line):
   # Image../data/example.tif
   # Image definition (image number, brick size, maximum mipmap level, # channels)
   0 128 5 3

   #mipmap level 0 definition (mipmap level, file name, size in X, size in Y
   0 /filePath/example.0.tif 2048 1024
   1 /filePath/example.1.tif 1024 512
     ……
   5 /filePath/example.4.tif 128 64
2. Input batch file:
The input batch file starts with the number of images in the file, and then lists the file names for each image.
Sample file:
   # number of images
   3
   
   # images
   /filePath/example1.tif
   /filePath/example2.tif
   /filePath/example3.tif
3. Output batch file:
The input batch file first specifies number of images listed in the file, and then lists all the file names for all the mipmaps of each image.
Sample file:
   # Number of images
   3
   
   # Image data/example1.tif
   # Image definition (image number, brick size, maximum mipmap level, # channels
   1 128 4 3
   # mipmap level 0 definition (mipmap level, file name, size in X, size in Y
   0 /filePath/example1.0.tif 1024 1024
   ……
   4 /filePath/example1.3.tif 128 128
   
   # Image data/example2.tif
   # Image definition (image number, brick size, maximum mipmap level, # channels
   2 128 5 3
   # mipmap level 0 definition (mipmap level, file name, size in X, size in Y
   ……
   
   # Image data/example3.tif
   ……

Readers


There are two C functions to access bricks in the mipmaps:
int getOneChannelData(int x, int y, int c, unsigned char *buf);
Get all the pixels in c-th channel of brick (x, y), and put it in the buf
int getMultiChannelData(int x, int y, unsigned char *buf);
Get all the pixels in all channel of brick (x, y), and put it in the buf
Readers access a brick with it’s coordinate (x, y)(Fig. 1), which starts from the lower left corner of the image, and put it in a 1D array.
Note that we don’t pad for the boundary bricks smaller than the brick size. So the user should be aware of the size change on the boundaries and allocate the buf appropriately.

Version


Current version only supports TIFF image. The input TIFF image should be uncompressed. Only the data chunk specified by the first image file directory (IFD) will be processed.