Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Need to understand the code

Status
Not open for further replies.

waqas2505

Newbie level 4
Joined
Nov 17, 2011
Messages
5
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,317
Could somebody please explain to me what is happening in this program, line by line because I am having problems understanding it.

Code:
close all;
clear all;
qy=[...
    3   2   2   3   5   8  10  12
    2   2   3   4   5  12  12  11
    3   3   3   5   8  11  14  11
    3   3   4   6  10  17  16  12
    4   4   7  11  14  22  21  15
    5   7  11  13  16  21  23  18
    10  13  16  17  21  24  24  20
    14  18  19  20  22  20  21  20];
%qy=[...
 %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 35 55 64 81 104 113 92
%9 64 78 87 103 121 120 101
%72 92 95 98 112 100 103 99];
   
    qc=[... 
    17	18	24	47	99	99	99	99
    18	21	26	66	99	99	99	99
    24	26	56	99	99	99	99	99
    47	66	99	99	99	99	99	99
    99	99	99	99	99	99	99	99
    99	99	99	99	99	99	99	99
    99	99	99	99	99	99	99	99
    99	99	99	99	99	99	99	99];


row= [1 1 2 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 3 4 5 6 7 8 8 7 6 5 4 5 6 7 8 8 7 6 7 8 8];
col= [1 2 1 1 2 3 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 8 7 6 5 4 3 4 5 6 7 8 8 7 6 5 6 7 8 8 7 8];





tabledc=[...
     3 0 1 0 0 0 0 0 0 0
     3 0 1 1 0 0 0 0 0 0
     3 1 0 0 0 0 0 0 0 0
     3 1 0 1 0 0 0 0 0 0
     3 1 1 0 0 0 0 0 0 0
     4 1 1 1 0 0 0 0 0 0
     5 1 1 1 1 0 0 0 0 0
     6 1 1 1 1 1 0 0 0 0
     7 1 1 1 1 1 1 0 0 0
     8 1 1 1 1 1 1 1 0 0
     9 1 1 1 1 1 1 1 1 0];


%    run - no of bits required to encode data- total length - base code length(imp) -  base code use for both luminance and chr as in hex file...
tableac=[...
 0  1   3  2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0  2   4  2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0  3   6  3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 0  4   8  4 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0
 0  5  10  5 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
 0  6  13  7 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 
 0  7  15  8 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 
 0  8  18 10 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0
 0  9  25 16 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0
 0 10  26 16 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1
 1  1   5  4 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 1  2   7  5 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 
 1  3  10  7 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0
 1  4  13  9 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0
 1  5  16 11 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0
 1  6  22 16 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0
 1  7  23 16 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1
 1  8  24 16 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0
 1  9  25 16 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1
 1 10  26 16 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0
 2  1   6  5 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
 2  2  10  8 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0
 2  3  13 10 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 
 2  4  16 12 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0
 2  5  21 16 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 1
 2  6  22 16 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 0
 2  7  23 16 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 1
 2  8  24 16 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0
 2  9  25 16 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1
 2 10  26 16 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0
 3  1   7  6 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0
 3  2  11  9 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0
 3  3  15 12 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 
 3  4  20 16 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1
 3  5  21 16 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0
 3  6  22 16 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1
 3  7  23 16 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0
 3  8  24 16 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 1
 3  9  25 16 1 1 1 1 1 1 1 1 1 0 0 1 0 1 0 0
 3 10  26 16 1 1 1 1 1 1 1 1 1 0 0 1 0 1 0 1
 4  1   7  6 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0
 4  2  12 10 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 
 4  3  19 16 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0
 4  4  20 16 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1
 4  5  21 16 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0
 4  6  22 16 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1
 4  7  23 16 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 0
 4  8  24 16 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 1
 4  9  25 16 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0
 4 10  26 16 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 1
 5  1   8  7 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0
 5  2  13 11 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 
 5  3  19 16 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0
 5  4  20 16 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1
 5  5  21 16 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0
 5  6  22 16 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1
 5  7  23 16 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 0
 5  8  24 16 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1
 5  9  25 16 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 0
 5 10  26 16 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1
 6  1   8  7 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0
 6  2  14 12 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 
 6  3  19 16 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 0
 6  4  20 16 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1
 6  5  21 16 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0
 6  6  22 16 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 1
 6  7  23 16 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0
 6  8  24 16 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1
 6  9  25 16 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0
 6 10  26 16 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1
 7  1   9  8 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0
 7  2  14 12 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 
 7  3  19 16 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 0
 7  4  20 16 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1
 7  5  21 16 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0
 7  6  22 16 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 1
 7  7  23 16 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0
 7  8  24 16 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1
 7  9  25 16 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0
 7 10  26 16 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1
 8  1  10  9 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
 8  2  17 15 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
 8  3  19 16 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0
 8  4  20 16 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1
 8  5  21 16 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0
 8  6  22 16 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1
 8  7  23 16 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0
 8  8  24 16 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1
 8  9  25 16 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0
 8 10  26 16 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1
 9  1  10  9 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 
 9  2  18 16 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0
 9  3  19 16 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1
 9  4  20 16 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
 9  5  21 16 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
 9  6  22 16 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0
 9  7  23 16 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1
 9  8  24 16 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0
 9  9  25 16 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1
 9 10  26 16 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0
10  1  10  9 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 
10  2  18 16 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1
10  3  19 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0
10  4  20 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1
10  5  21 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 0
10  6  22 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1
10  7  23 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0
10  8  24 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1
10  9  25 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0
10 10  26 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1
11  1  11 10 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 
11  2  18 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0
11  3  19 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1
11  4  20 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0
11  5  21 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1
11  6  22 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0
11  7  23 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1
11  8  24 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0
11  9  25 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1
11 10  26 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0
12  1  11 10 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 
12  2  18 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1
12  3  19 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0
12  4  20 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1
12  5  21 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0
12  6  22 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1
12  7  23 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0
12  8  24 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
12  9  25 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
12 10  26 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1
13  1  12 11 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 
13  2  18 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0
13  3  19 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1
13  4  20 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0
13  5  21 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1
13  6  22 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0
13  7  23 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1
13  8  24 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0
13  9  25 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1
13 10  26 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0
14  1  17 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1
14  2  18 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0
14  3  19 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1
14  4  20 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0
14  5  21 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1
14  6  22 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
14  7  23 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1
14  8  24 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0
14  9  25 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1
14 10  26 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0
15  1  17 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1
15  2  18 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0
15  3  19 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1
15  4  20 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
15  5  21 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1
15  6  22 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0
15  7  23 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1
15  8  24 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
15  9  25 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
15 10  26 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0];





img=imread('Tiff.tif');
i=imageresize(img);
img=imread('asd.tif','tif');
prop=imfinfo('asd.tif','tif');
%prop=imread('Water lilies.bmp');


h=ceil((prop.Height)/8);
w=ceil((prop.Width)/8);


ycbcrmap=zeros(h*8,w*8,3);
ycbcrmap(1:prop.Height,1:prop.Width,1:3) = rgb2ycbcr(img);



      fid1=  fopen('save1.zsh','w');
      fid2=  fopen('header','r');
      hread=fread(fid2);
      fwrite(fid1,hread);
      fclose(fid2);
      buf=[];
      bufstr='';
accode=[];


for i=1:h
   for j=1:w
      temp=zeros(8,8);
      for y=1:3
         for k=1:8
         for l=1:8
            temp(k,l)=ycbcrmap(((i-1)*8)+k,((j-1)*8)+l,y);
            end
      end

      temp=temp-128;
          
      temp=dct2(temp);
      
      if(y==1)
         temp=temp./qy;
      else
         temp=temp./qc;
      end
      
      temp=round(temp);
                 
      for ct=1:64
      str(ct)=temp(row(ct),col(ct));
     	end
        
        
     
   if j==1 & i==1
      dc=temp(1);
      dcl(y)=temp(1);
   else
      dc=temp(1)-dcl(y);
      dcl(y)=temp(1);
   end
   
   
   if dc==0
      dccode=[0 0];
   else
   dcabs=abs(dc);
   dcbin=dec2bin(dcabs);
   dclen=length(dcbin);
   if dc<0
      comp=repmat(49,[1 dclen]);
      dcbin=comp-dcbin;
   else
      comp=repmat(48,[1 dclen]);
      dcbin=dcbin-comp;
   end
   
   
   dccode=tabledc(dclen,2:1+tabledc(dclen,1));
   dccode=[dccode dcbin];
end


%ac dec for lum
str=str(2:64);
nozac=find(str~=0);
acno=length(nozac);

for o=1:acno
   ac=str(nozac(o));
   acabs=abs(ac);
   acbin=dec2bin(acabs);
   aclen=length(acbin);
   if ac<0
      comp=repmat(49,[1 aclen]);
      acbin=comp-acbin;
   else
      comp=repmat(48,[1 aclen]);
      acbin=acbin-comp;
   end
   
   if(nozac(o)==1)
      acseq=tableac(aclen,5:4+tableac(aclen,4));
      accode=[accode acseq acbin];
   else
      if o==1
         z=nozac(o)-1;
         else
            z=nozac(o)-nozac(o-1)-1;
         end
         
      %check 4 if z>=15
      noz=floor(z/15);
      zrl=[1 1 1 1 1 1 1 1 0 0 1];
      accode=[accode repmat(zrl,[1,noz])];
      z=rem(z,15);
         
         %generate the huffman sequence from table
         acseq=tableac((z*10)+aclen,5:4+tableac((z*10)+aclen,4));
         accode=[accode acseq acbin];
     end
  end
   
  accode=[accode 1 0 1 0];
   
   accode=[dccode accode];  
   if(i==h)
      if(j==w)
         accode=[accode 0 0 1 0 1 0];
      end
   end
   
   
   %fwrite to file
   q=1;     
   while(q<=length(accode))
      if length(buf)~=8
         buf=[buf accode(q)];
         q=q+1;
      else
         for e=1:8
            if buf(e)==0
               bufstr=[bufstr '0'];
            else
               bufstr=[bufstr '1'];
            end
         end
         kk=bin2dec(bufstr);
         fwrite(fid1,kk,'uint8');
         if kk==255
            fwrite(fid1,0,'uint8');
         end
         buf=[];
         bufstr=[];
      end
   end
   temp=[];
   accode=[];
dccode=[];  
   
end   
   end
end

if length(buf)~=0
   buf=[buf zeros(1,8-length(buf))];
        for e=1:8
            if buf(e)==0
               bufstr=[bufstr '0'];
            else
               bufstr=[bufstr '1'];
            end
         end
         kk=bin2dec(bufstr);
         fwrite(fid1,kk,'uint8');
         if kk==255
            fwrite(fid1,0,'uint8');
         end
end

fwrite(fid1,255,'uint8');
%corresponding to ff
fwrite(fid1,217,'uint8');
%corresponding to d9


fseek(fid1,163,-1);
if(prop.Height<255)
   fwrite(fid1,0,'uint8');
   fwrite(fid1,prop.Height,'uint8');
else
   fwrite(fid1,(prop.Height/256),'uint8');
   fwrite(fid1,rem(prop.Height,256),'uint8');
end
fseek(fid1,165,-1);
   %specify height at an offset of a4
   if(prop.Width<255)
   fwrite(fid1,0,'uint8');
   fwrite(fid1,prop.Width,'uint8');
else
      fwrite(fid1,(prop.Width/256),'uint8');
   fwrite(fid1,rem(prop.Width,256),'uint8');
   end
   
      %specify width at an offset of a6
 %fseek(fid1,0,1);
fclose(fid1);
 
Last edited by a moderator:

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top