File Exchange

image thumbnail

JPEG Compression (DCT)

version (3.84 KB) by Vinay Kumar Tadepalli
JPEG compression using Discrete Cosine Transform Technique


Updated 07 Feb 2012

View License

In this code, Run Length Encoding is used to compress the Normalized DCT Coefficients, and corresponding Decoding techniques are used to decompress the image.

Cite As

Vinay Kumar Tadepalli (2020). JPEG Compression (DCT) (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (36)

Error: File: dct1.m Line: 337 Column: 22
All functions in a script must be closed with an 'end'


how to run this code. It gives error for input arguments.

how can I find the compression ratio between original image and compressed image??? please help with this issue...

Rasik Raj

when ever i run the code using gray scale image with n=8 and m=20 im getting some errors please help me :::

Index exceeds matrix dimensions.

Error in dct1 (line 83)

Im getting confused, when i try to print the value of each pixel after getting the DCT, it doesn't return enough the number of pixels which is 128*128, and it returns different number of values for every new turn , can u help me explain it

Array dimensions must match for binary array op.

Error in dct1 (line 330)

how can this error be solved?

Juan wang


prince garg

hii, this code is running fine but how am i supposed to get the compressed image...


Dat Tran

Thank you so much. It run very very good

Kenn Lu

Matlab code for jpeg compression using dct

Sonu Yadav

how to run and see the output


i got error at this line..
Error using dct1 (line 11)
Not enough input arguments.

dear Vinay,thanks for your usful code,but when i run it this error acure:
??? Error using ==> minus
Matrix dimensions must agree.

Error in ==> dct1 at 325

plz help me to run your code!

I want to compress Depth Map 16-bit.
Is it possible ?


I want the compressed image in matrix form. Is it possible?

Sir this code works very well for gray images... I tried this for color images by converting the RGB to YCbCr and then did the code for each Y, Cb, Cr separately and then combined it.... it worked without any errors .... but the i couldnt restore the color image as the input image.... please could you help me to work with the color images also.... please do reply...


Hello, I am using a .raw format input image.I am getting error as too many output arguments.Could you please help me to solve the problem.Thank you..


Thank you Vinay for the explanation. But for lower values of m,say 4, where bpp would then be 0.5, there appears a lot more block noise than expected at that bitrate. any adjustments you might suggest?

Dear Andrew,

The n indicate the pixel depth of the input image. So, for an RGB Color image, it is 24, and for a monochrome image (gray scale image), it is 8 bits. And m indicates the amount of compression that you can afford. The range of m should be [1, n]. For example, when you are computing DCT for an 8-bit image, the DCT coefficients you obtain are normalized with normalization matrix and then rounded off (normalization+rounding off = quantization). And then these Quantized coefficients are converted to binary form and NOW you have a choice whether to retain all the bits of each DCT coefficient or only some. That will be specified by the user as m.

Note that both m and n are positive integers.

Hope it cleared your doubts.


Hi Vinay, i run the DCT code but i need more explanation on the n,m part. e.g when i run n=8,m=2, i get an error about exceeding matrix dimensions. n is also indicated as bits per pixel, but when i try a value like n= 0.5, i still get an error.
Please enlighten me on that part(n,m) and how to use then to calculate the right bit per pixel values. Otherwise thank you for the code

Dear Mehdi, the code is not generalized for Images of arbitrary sizes. So, you have to include a code for padding additional rows and columns to make row number and column number a multiple of 2. That should solve the problem. If you have any other issues, let me know.


thanks for Code, but when i run it i have this error Error using - Matrix dimensions must agree. Error in W (line 327) diff=im2double(I)*255-I_rec;

Hi tonyk, M and N represent the non-overlapping block size in the entire image. That means, the digital image is divided into a number of blocks of dimension M X N. Typical values are M=N=8.

tonyk bui

plz tell me about m and n ?
i don't know


Can this code be extended for three dimensional DCT?

One way is to encode the three color layers independently using the above method and then combine in the end. You may need to use some extra bits for separating b/w the binary data of each layer.

>>This code is written for GrayScale Image. >>But it can be easily modified to make it >>work for color images also.

How so?

This code is written for GrayScale Image. But it can be easily modified to make it work for color images also.


does this work for colour image?



MATLAB Release Compatibility
Created with R2008b
Compatible with any release
Platform Compatibility
Windows macOS Linux