Image Processing with QccPack and Python

 in
How to use QccPack to manipulate images with Python in code and from the Python prompt.

Limited bandwidth and storage space are always a challenge. Data compression is often the best solution. When it comes to image processing, compression techniques are divided into two types: lossless and lossy data compression.

QccPack, developed by James Fowler, is an open-source collection of library routines and utility programs for quantization and reliable implementation of common compression techniques.

Libraries written for QccPack have a clean interface. So far, these libraries can be upgraded without having to modify the application code. QccPack consists of a static-linked library, libQccPack.a, and supports dynamic linking with libQccPack.so.

Entropy coding, wavelet transforms, wavelet-based sub-band coding, error coding, image processing and implementations of general routines can be done through the library routines available with QccPack. Optional modules are available for the QccPack library that you can add later. QccPackSPIHT is one optional module for the QccPack library that provides an implementation of the Set Partitioning in Hierarchical Trees (SPIHT) algorithm for image compression. The QccPackSPIHT module includes two utility executables, spihtencode and spihtdecode, to perform SPIHT encoding and decoding for grayscale images.

QccPack and QccPackSPIHT are available for download from the QccPack Web page on SourceForge. Red Hat users can find source and binary RPMs at that Web site. Users of other systems will need to compile the source code. QccPack has been complied successfully on Solaris/SPARC, Irix, HP-UX, Digital UNIX Alpha and Digital RISC/Ultrix.

QccPack from the Python Prompt

You can use QccPack to train a VQ codebook on an image and then to code the image with full-search VQ followed with arithmetic coding. Take a 512*512 grayscale Lenna image, for example. The following sample procedure assumes you are at the Python interpreter prompt.

Step 1: convert from the PGM image file format to the DAT format file by extracting four-dimensional (2x2) vectors of pixels:

>>> imgtodat-ts 4 lenna.pgm.gz lenna.4D.dat.gz

Step 2: train a 256-codeword VQ codebook on the DAT file with GLA (stopping threshold = 0.01):

>>> gla -s 256 -t 0.01 lenna.4D.dat.gz lenna.4D256.cbk

Step 3: vector quantize the DAT file to produce a channel of VQ indices:

>>> vqencode lenna.4D.dat.gz lenna.4D256.cbk lenna.vq.4D256.chn

Step 4: calculate first-order entropy of VQ indices (as bits/pixel):

>>> chnentropy -d 4 lenna.vq.4D256.chn First-order entropy 
 ↪of channel lenna.vq.4D256.chn is: 1.852505 (bits/symbol)

Step 5: arithmetic-encode channel of VQ indices:

>>> chnarithmeticencode -d 4 lenna.vq.4D256.chn 
 ↪lenna.vq.4D256.chn.ac 

Channel lenna.vq.4D256.chn arithmetic coded to: 1.830322 (bits/symbol):

>>> rm lenna.vq.4D256.chn

Step 6: decode arithmetic-coded channel:

>>> chnarithmeticdecode lenna.vq.4D256.chn.ac lenna.vq.4D256.chn

Step 7: inverse VQ channel to produce quantized data:

>>> vqdecode lenna.vq.4D256.chn lenna.4D256.cbk 
 ↪lenna.vq.4D256.dat.gz

Step 8: convert from DAT to PGM format:

>>> dattoimg 512 512 lenna.vq.4D256.dat.gz lenna.vq.4D256.pgm

Step 9: calculate distortion between original and coded images:

>>> imgdist lenna.pgm.gz lenna.vq.4D2 56.pgm

The distortion between files lenna.pgm.gz and lenna.vq.4D256.pgm is:

  • 13.841091 (MSE)

  • 22.186606 dB (SNR)

  • 36.719100 dB (PSNR)

Python Imaging Library

The Python Imaging Library adds image processing capabilities to the Python interpreter. This library provides extensive file format support, an efficient internal representation and fairly powerful image processing capabilities. The core image library is designed for fast access to data stored in a few basic pixel formats. The library contains some basic image processing functionality, including point operations, filtering with a set of built-in convolution kernels and color space conversions. The Python Imaging Library is ideal for image archival and batch processing applications. You can use the library to create thumbnails, convert between file formats and print images. The library also supports image resizing, rotation and arbitrary affine transforms.

The Python Imaging Library uses a plugin model that allows you to add your own decoders to the library, without any changes to the library itself. These plugins have names such as XxxImagePlugin.py, where Xxx is a unique format name (usually an abbreviation).

______________________

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

image processing with scripting language

image processing's picture

Python Imaging Library have great features and your blog is like a teacher where every information is very vital and informative for me.thanks a lot providing me such kind of information.

Regards,
image processing

White Paper
Linux Management with Red Hat Satellite: Measuring Business Impact and ROI

Linux has become a key foundation for supporting today's rapidly growing IT environments. Linux is being used to deploy business applications and databases, trading on its reputation as a low-cost operating environment. For many IT organizations, Linux is a mainstay for deploying Web servers and has evolved from handling basic file, print, and utility workloads to running mission-critical applications and databases, physically, virtually, and in the cloud. As Linux grows in importance in terms of value to the business, managing Linux environments to high standards of service quality — availability, security, and performance — becomes an essential requirement for business success.

Learn More

Sponsored by Red Hat

White Paper
Private PaaS for the Agile Enterprise

If you already use virtualized infrastructure, you are well on your way to leveraging the power of the cloud. Virtualization offers the promise of limitless resources, but how do you manage that scalability when your DevOps team doesn’t scale? In today’s hypercompetitive markets, fast results can make a difference between leading the pack vs. obsolescence. Organizations need more benefits from cloud computing than just raw resources. They need agility, flexibility, convenience, ROI, and control.

Stackato private Platform-as-a-Service technology from ActiveState extends your private cloud infrastructure by creating a private PaaS to provide on-demand availability, flexibility, control, and ultimately, faster time-to-market for your enterprise.

Learn More

Sponsored by ActiveState