Skip to main content

Block Truncation Coding (BTC)– Image Compression- MATLAB

Block Truncation Coding (BTC):

To my knowledge, BTC is the simplest approach to perform image compression.

BTC- Implementation:


As provided in its title, BTC perform compression in a block wise manner.

Referring to the figure, each block is MxN size, then for each block mean, a and b are computed (please check the paper to find out the formula for 'a' and 'b')

To perform compression, each pixel in the block is thresholded with the block mean value

IF            the pixel > mean, then it is assigned 1
ELSE      the pixel is assigned 0

This output is termed as the bitmap image.

While transmitting, the bit map image along with it 'a' and 'b' are transmitted.

If suppose the block size is 8x8, and for a typical 8-bit image

Original image = 8x8x8= 512 bits

BTC image: Bitmap=8x8x1=64 bits
                     'a' and 'b'= 16 bits
                     Total= 80 bits

Decoding stage: The original image is reconstructed by substituting the bitmap image as follows

'1' is replaced with high mean 'a' and '0' with low mean 'b'

Note: It is important to note that, a) BTC is a lossy compression i.e. we lose some information

b) The maximum compression ratio is 8

c) The compression ratio increase with block size, but it also cause block artifacts and poor image quality.
%Block Truncation Coding
% Ref:Delp, Edward, and O. Mitchell.
%”Image compression using block truncation coding.”
%IEEE transactions on Communications 27.9 (1979): 1335-1342.
%Programmed By: Sankarasrinivasan S
%Multimedia Signal Processing Lab, Dept. of Elec Engg. NTUST
%Oct 2016
function [H]=btc(in,bs)
%in–> input image, bs-block size(2,4,..)
[s1 s2]=size(in);
n=bs*bs;
for i=1:bs:s1
for j=1:bs:s2
bl=in(i:i+(bs-1),j:j+(bs-1));
mn=mean(bl(:)) ; %Computing Mean
sd=std(double(bl(:)),1); %Standard Deviation
c=bl>mn;
q=nnz(c);
a=mn-(sd*sqrt((q)/(n-q)));
b=mn+(sd*sqrt((n-q)/(q)));
out=round((c).*b+((~c)).*a);
H(i:i+(bs-1),j:j+(bs-1))=out;
end
end
imshow(H);
end

Comments

Popular posts from this blog

Image RGB to CMYK : Image Conversion - MATLAB Code (RGB to CMYK, CMYK to RGB)

MATAB use makecform and applycform functions to perform this color model conversion  Ref: makecform:  https://www.mathworks.com/help/images/ref/makecform.html Ref: applycform:  https://www.mathworks.com/help/images/ref/applycform.html RGB to CMYK: I_rgb = imread('lena_color.jpg'); %Read the color image  C = makecform('srgb2cmyk');     %srgb (standard rgb) to cmyk  I_CMYK= applycform(I_rgb,C); TO SAVE IN CMYK Format imwrite(I_CMYK, 'test.tiff'); USE IMFINFO to confirm the conversion imfinfo('test.tiff') the command gives the output ... Width: 512 Height: 512 BitDepth: 32 ColorType: 'CMYK' ... CMYK to RGB: I_CMYK = imread('lena_color.jpg'); %Read the color image  C = makecform('cmyk2srgb');     %srgb (standard rgb) to cmyk  I_rgb= applycform(I_CMYK, C);

Digital Half Toning - Ordered Dithering - MATLAB Code Bayer/ Ulichney

Digital Half-toning is a technique to convert the gray scale / color image (in the range 0-255) to binary images (in the range 0-1)  that is useful for printing (especially black and white printers). Though at first glance dots are clearly visible, as Human Vision System is a low pass filter, when dots are printed closely and viewed from the specific distance it can be perceived as a continuous tone image (i.e. gray scale). In general, half toning techniques is widely used in newspapers, journals and magazines printing.  Halftoning algorithms aims for better #Image Quality #Low Complexity #Optimal ink usage Coming to the topic, Ordered dithering is one of the standard technique to produce halftone image from continuous (gray scale) images. Let us assume, the first block containing 'B' is an image matrix and the  'H' is the threshold matrix. And the process is simply a element wise (pixel wise) comparison; if element of B > H (g

Direct Binary Search Halftoning (DBS) - MATLAB Code (Efficient Direct Binary Search, Halftoning)

Direct binary approach is a heuristic optimization method and is proven to be very powerful to  obtain optimized binary patterns. The approach achieves the least minimum square error between the perceived halftone and original image, though swap and toggle operation. The swap operation consists of switching the current pixel with eight of its neighborhood pixels. Toggle operation is about switching the values between 0 to 1 or vice versa (as shown in Fig. below)      With each iteration, the perceived error starts to reduce and in finally a superior halftone quality is achieved. The method is computationally very expensive and difficult to implement in hardware. The code for Efficient DBS is provided in the link: (MATLAB Code) https://github.com/SankarSrin/EDBS-Halftoning