Software

During my PhD studies I've been writing some ad-hoc software to help my research which I then decided in 2008 to make it available in case someone will find it useful. Initially the software was provided from the list below which is still accessible but it won't be maintained anymore: this is because nowadays the best way to share/maintain and collaborate on code is via providers such as GitHub or GitLab. Accordingly, you may find a new collection of the software I wrote from GitHub:

I also decided to make available some of the material I used when teaching image and video compression at the Technical University of Milan (i.e. the Politecnico di Milano) as well as used in some ad-hoc training I've given during my carrier in the industry. The material is organised as a collection of Jupyter notebooks available from the following GitHub repository:

Old version of the software tools

Here you can download some Matlab ® scripts and C/C++ programs I wrote as support tools for my research activity. Please feel free to contact me for comments and improvements.

  • abekas2yuv: An MS-DOS executable converting the abekas file format into the YCbCr planar and progressive format. The software is the same that you can download from here.

  • burst_counter: A Matlab script computing the average burst length of a given error pattern specified as a string of characters '0' and '1' .

  • burst_counter: C implementation of the Matlab script above.

  • dct_frame: Matlab script computing the Type II DCT over a nonoverlapped grid of NxN blocks.

  • gilbert_model: Matlab script providing an error pattern file with a given burst length and packet loss rate generated according to a two states Gilbert model. For further details see: E. N. Gilbert, “ Capacity of a burst-noise channel ,” Bell System Technical Journal, vol. 39, pp. 1253–1266, September 1960.

  • h264_quarter_pel: Matlab script providing the upsampling required to perform quarter pel precision motion compensation as specified by the H.264/AVC standard.

  • luma_grabber: Matlab script returning a matrix containing the luminance component of the frame numbers specified as input parameter.

  • psnr_calculation: Matlab script returning the PSNR between the original YCbCr video sequence and the tested one. The PSNR is computed over the luma and the two chroma ones.

  • transmitter_simulator: C++ software simulating the transmission of an H.264/AVC bitstream through an error prone channel which drops coded packets according to a given packet loss rate.

  • yuv2rgb: Matlab script performing the YCbCr to RGB conversion according to what described here.

  • yuv422to420converter: Matlab script performing the spatial downsampling of the chrominance components of one YUV video sequence file

  • modified_h264_decoder: A modified version of the H.264/AVC encoder/decoder reference software provided by JVT (aka JM, version 12.3). The encoder can be configured to avoid intra macroblock prediction in inter coded slices. Conversely, the decoder will dump some useful data (e.g. motion vectors, coding modes, prediction residuals, etc.) to perform some further analysis in Matlab/Python, etc.. WARNING : The current decoder works only with bitstreams coded with the Baseline profile.

  • spatiotemporal_index: Matlab script computing the spatial and temporal indexes according to the ITU-R specifications provided in the following document: "Subjective video quality assessment methods for multimedia applications", Recommendation ITU-R, P 910, September 1999.

  • image_class: C++ class implementing a 2D image with several useful functionalities for storing, accessing, etc. The class also provides several overloaded operators to simplify operations like: sum, subtraction, multiplication, etc. between two images.

  • H.264/AVC forward 4x4 DCT & quantization: Matlab MEX function performing the 4x4 Discrete Cosine Transform (DCT) and quantization as specified in the H.264/AVC standard.

  • H.264/AVC inverse quantization & inverse4x4 DCT: Matlab MEX function performing the 4x4 inverse quantization and Inverse Discrete Cosine Transform (IDCT) as specified in the H.264/AVC standard.

  • blur_metric: Matlab script computing the blur metric for image quality assessment as described in the work: P. Marziliano, F. Dufaux, S. Winkler and T. Ebrahimi, "Perceptual blur and ringing metrics: application to JPEG2000", Signal Processing: Image Communication, vol. 19, no. 2, pp. 163-172, February 2004.

  • ringing_metric: Matlab script computing the ringing metric for image quality assessment as described in the work: P. Marziliano, F. Dufaux, S. Winkler and T. Ebrahimi, "Perceptual blur and ringing metrics: application to JPEG2000", Signal Processing: Image Communication, vol. 19, no. 2, pp. 163-172, February 2004.

  • ringing impairment addition: Matlab script to add, over the luminance component, the ringing impairment as specified in the ITU-T document: "Principles of a reference impairment system for video", Recommendation ITU-T P 930, August 1996.

  • SSIM index computation: C++ program computing the Structural SIMilarity (SSIM) index as specified in: Z. Wang, A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli, "Image quality assessment: from error visibility to structural similarity", IEEE Transactions on Image Processing, vol. 13 no. 4, pp. 600 - 612, April 2004.

  • compute_GBIM: Matlab script computing the Generalized Block Impairment Metric (GBIM) as proposed in: H. R. Wu and M. Yuen, "A generalized block-edge impairment metric for video coding", IEEE Signal Process. Lett., vol. 4, no. 11, pp. 317-320, Nov. 1997.