Top Banner
JPEG – Still Image Compression Zeeshan Akhtar Mtech (1 st year ) 14-LECM 018 GI-4784 A.M.U. aligarh
28

JPEG – Still Image Compression

Oct 02, 2015

Download

Documents

Zeeshan Akhtar

jpeg compression
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

JPEG Still Image Compression

JPEG Still Image CompressionZeeshan AkhtarMtech (1st year )14-LECM 018GI-4784A.M.U. aligarhEncodingJPEG:Basic Algorithm

Step 1-Read the image Convert it to grayscaleOffset levelDetermine the size of imageimage = imread('leena.jpg');gray = rgb2gray(image);d = double(gray);D = d-128;%offset[M,N] = size(D);Step 2

Zero PaddingDetermine the new size of image

Rem_M = mod(M,8);Rem_N = mod(N,8); Extra_M = 8 - Rem_M;Extra_N = 8 - Rem_N;if Extra_M==0 M_new = M;elseM_new = M + Extra_M;endif Extra_N==0N_new = N;else N_new = N + Extra_N;end D_new = padarray(D,[Extra_M Extra_N],'post');Step 3Define Quantization table

Q = [ 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 36 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99];Step 4Break image in small blocks of 8*8 dimensionPerform DCT on each blockPerform quantization Separate AC and DC part of the imageZig zag Scanning

X = M_new/8;Y = N_new/8;DC_array = zeros(1,X*Y);AC_matrix= zeros(X*Y,63);c=1; d=8; t = 1;for j = 1:Xa=1;b=8; for i = 1:Y small_D = D_new(c:d,a:b); dct = round(dct2(small_D)); Quant_D = round(dct./Q); DC_array(t) = Quant_D(1,1); AC_matrix(t,1:63) = zigzag2(Quant_D); t = t + 1; a = a+8; b = b+8; end c = c+8; d = d+8;end

function file=zigzag(T); file=[ T(1,2) T(2,1) T(3,1) T(2,2) ... T(1,3) T(1,4) T(2,3) T(3,2) T(4,1) ... T(5,1) T(4,2) T(3,3) T(2,4) T(1,5) ... T(1,6) T(2,5) T(3,4) T(4,3) T(5,2) ... T(6,1) T(7,1) T(6,2) T(5,3) T(4,4) ... T(3,5) T(2,6) T(1,7) T(1,8) T(2,7) ... T(3,6) T(4,5) T(5,4) T(6,3) T(7,2) ... T(8,1) T(8,2) T(7,3) T(6,4) T(5,5) ... T(4,6) T(3,7) T(2,8) T(3,8) T(4,7) ... T(5,6) T(6,5) T(7,4) T(8,3) T(8,4) ... T(7,5) T(6,6) T(5,7) T(4,8) T(5,8) ... T(6,7) T(7,6) T(8,5) T(8,6) T(7,7) ... T(6,8) T(7,8) T(8,7) T(8,8)]Step5Perform Differential Coding on DC part separated

coded_DC = zeros(1,X*Y);L1 = (X*Y)-1;for i=1:L1 coded_DC(i+1) = DC_array(i+1)- DC_array(i);end coded_DC(1) = DC_array(1); Step 6Run length coding of AC separatedL2 = (X*Y);for i=1:L2 AC_array = AC_matrix(i,:); coded_AC(i,:) = rle(AC_array);end DecodingStep 1- AC decoding(Run length)for i = 1:L2 decoded_AC(i,:) = rle(coded_AC(i,:));endStep2- Diffrential Decodingdecoded_DC(1) = coded_DC(1);for i=1:L1 decoded_DC(i+1) = decoded_DC(i) + coded_DC(i+1);end Step3IDCTINVERSE ZIG ZAG SCANNING IMAGE RECONSTRUCTIONlowlevel_image = zeros(N_new,M_new); a=1;b=8;c=1;d=8;t=1; for i = 1:X for j= 1:Y AC_DC_array = AC_DC(t,:); q=zeros(8,8); q = invzigzag(AC_DC_array); Inv_Q = round(q.*Q); lowlevel_image(a:b,c:d) = round(idct2(Inv_Q)); c=c+8; d=d+8; t=t+1; end c=1; d=8; a=a+8; b=b+8;endfunction inv=invzigzag(T); inv=[ T(1,1) T(1,2) T(1,6) T(1,7) T(1,15) T(1,16) T(1,28) T(1,29) T(1,3) T(1,5) T(1,8) T(1,14) T(1,17) T(1,27) T(1,30) T(1,43) T(1,4) T(1,9) T(1,13) T(1,18) T(1,26) T(1,31) T(1,42) T(1,44) T(1,10) T(1,12) T(1,19) T(1,25) T(1,32) T(1,41) T(1,45) T(1,54) T(1,11) T(1,20) T(1,24) T(1,33) T(1,40) T(1,46) T(1,53) T(1,55) T(1,21) T(1,23) T(1,34) T(1,39) T(1,47) T(1,52) T(1,56) T(1,61) T(1,22) T(1,35) T(1,38) T(1,48) T(1,51) T(1,57) T(1,60) T(1,62) T(1,36) T(1,37) T(1,49) T(1,50) T(1,58) T(1,59) T(1,63) T(1,64) ]Inverse ZiG- ZaG MappingStep 4 - Inverse Offset uplevel_image = lowlevel_image + 128;Image = uint8(uplevel_image); Step 5Display both the original and compressed imagesCompare both the imagesFind and display the difference between two.figure;imshow(gray);title('original image')figure;imshow(Image);title('after decoding')difference= (d)-(uplevel_image);figure;imshow(difference);Thank You