FeiYuePsych2012Project

From Psych 221 Image Systems Engineering
Revision as of 17:24, 20 March 2012 by imported>Psych2012 (→‎Background)
Jump to navigation Jump to search

Background

In today's computer graphics, a large amount of textures are mapped onto surfaces of objects to add visual details and provide realism. These textures can consume a large portion of system and video memory. An efficient compression algorithm can reduce the amount of memory required for storing the textures and allow better performance by reducing the memory bandwidth used to fetch textures. An efficient real-time compression algorithm is important for dynamic texture generation and for texture streaming where the source compression format is different than the GPU hardware compression format.

The DXT compression format is common across most major GPU hardware. DXT1, stores 16 input pixels in 64 bits of output. The output consists of two 16-bit RGB 5:6:5 color values and a 4x4 two bit lookup table. [] The compression ratio is 6:1 for 24 bit source images. DXT5, converts 16 input pixels into 128 bits of output. The output consists of 64 bits of alpha channel data, followed by 64 bits of color data. [] The compression ratio is 4:1.

The DXT compression format loses some image quality and introduces blocking artifacts. Several attempts have been made to improve image quality for this format. The state-of-art in real-time DXT compression is "Real-Time YCoCg-DXT compression" [].

[talk about algorithm pipeline here]

The base algorithm can increase the RGB-PSNR by 6dB or more [], there are other steps one could take to further improve the image quality. This project focuses on three additional steps to reduce compression artifacts on top of the Real-Time YCoCg-DXT Compression algorithm.

Methods

The first step after transforming from RGB to YCoCg space is to do a non-linear remap of the chroma components. The Co and Cg values range from -1 to 1. Using the function described in Equation 1, we expand the lower region of the chroma value to increase precision. This is to take the advantage of the human vision system that the eye is more sensitive to chroma differences when the colors are present in small quantities as opposed to being almost saturated. The effects of Equation 1 is illustrated by Figure[].

Co_out = sqrt(abs(Co_in))*sin(Co_in)


The second step is to apply sharpening to the image. A low pass filter with the kernel of Equation 2 is applied to the original image. Then, the sharpening mask is produced by subtracting the low-passed image from the original image. Lastly, the sharpening mask is applied onto the image. The sharpening is only done to the luma channel, restricted to one quantization level. This effort is to reduce some of the quantization artifacts on the image, and to restore the original image, without making the resulting image overly sharpened.

1 2 1

2 4 2

1 2 1


The third step is to add noise to each of the Y, Co and Cg channels. This would affect the least significant bits during encoding, therefore reducing the banding effects. Less noise is added to the Cg' channel than the Co', and even less to the Y channel. This is because the human eye is more sensitive to the luma and the green chrominance channels.

subsection 1

subsection 2

Results

Organize your results in a good logical order (not necessarily historical order). Include relevant graphs and/or images. Make sure graph axes are labeled. Make sure you draw the reader's attention to the key element of the figure. The key aspect should be the most visible element of the figure or graph. Help the reader by writing a clear figure caption.


subsection 1

subsection 2

Conclusions

Describe what you learned. What worked? What didn't? Why? What would you do if you kept working on the project?


References

List references. Include links to papers that are online.

Appendix I - Code and Data

Upload source code, some result images, etc, and give a description of each link. In some cases, your acquired data may be too large to store practically. In this case, use your judgement (or consult one of us) and only link the most relevant data. Be sure to describe the purpose of your code and to edit the code for clarity. The purpose of placing the code online is to allow others to verify your methods and to learn from your ideas. It should be possible for someone else to generate result images using your code.

Code