Lets Learn together... Happy Reading

" Two roads diverged in a wood, and I,
I took the one less traveled by,
And that has made all the difference "-Robert Frost

2-D Discrete Cosine Transform


DCT is a technique for converting a signal into elementary frequency components.
It is widely used in image compression. Check Inverse discrete cosine transform for the reverse process.





MATLAB CODE:

%CONSIDER A MATRIX
A=[4 2 9 60; 7 10 5 77;88 66 44 3];
%PREALLOCATE THE MATRICES
B=zeros(size(A));
Temp=zeros(size(A));
display(A);






%FIND THE SIZE OF THE MATRIX
[M N]=size(A);
for i=1:M
    for j=1:N
       
        if(i==1)
          AlphaP=sqrt(1/M);
        else
          AlphaP=sqrt(2/M);
        end
       
        if(j==1)
          AlphaQ=sqrt(1/N);
        else
          AlphaQ=sqrt(2/N);
        end


For A(1,1),  m=1 and n=1. If m= 1 then AlphaP=sqrt(1/M)=0.5774
If n=1 then AlphaQ=sqrt(1/N)=0.5000


For A(2,3),m=1 and n=3. AlphaP=sqrt(2/M)=0.8165
 AlphaQ =  sqrt(2/N) = 0.7071









Temp=0;
       for x=1:M
            for y=1:N
                   cs1=cos((pi*(2*x-1)*(i-1))/(2*M));
                cs2=cos((pi*(2*y-1)*(j-1))/(2*N));
                Temp=Temp+(A(x,y)*cs1*cs2);
             end
        end
       B(i,j)=AlphaP*AlphaQ*Temp;
    end
end
%2-D discrete Cosine Transform
display(B);






EXAMPLE 2



%2-D DISCRETE COSINE TRANSFORM FOR AN IMAGE


%READ THE IMAGE
I=imread('coins.png');
I=I(90:150,140:210);



A=double(I);

%PREALLOCATE THE MATRIX
B=zeros(size(A));
Temp=zeros(size(A));
[M N]=size(A);


%
x=1:M;
x=repmat(x',1,N);
y=repmat(1:N,M,1);


for i=1:M
    for j = 1: N
   
        if(i==1)
          AlphaP=sqrt(1/M);
        else
          AlphaP=sqrt(2/M);
        end
       
        if(j==1)
          AlphaQ=sqrt(1/N);
        else
          AlphaQ=sqrt(2/N);
        end
       
             
               
        cs1=cos((pi*(2*x-1)*(i-1))/(2*M));
        cs2=cos((pi*(2*y-1)*(j-1))/(2*N));
        Temp=A.*cs1.*cs2;
              
      
        B(i,j)=AlphaP*AlphaQ*sum(sum(Temp));
    end
end

%OUTPUT
figure,
subplot(2,1,1);imshow(I);title('Original Image');
subplot(2,1,2),imshow(log(abs(B)),[]);
colormap(jet);title('After DCT');





















like button Like "IMAGE PROCESSING" page

5 comments:

Unknown said... Reply to comment

Nice...

Unknown said... Reply to comment

Temp=zeros(size(A)) in first code . Is it right?? It should be just a variable.

Unknown said... Reply to comment

why are you taking only 61 and 71 pixel values and not more than that

unknown said... Reply to comment

after reading image, why did you write this step
I=I(90:150,140:210);

unknown said... Reply to comment

why did you use (2*x-1)*(i-1)
here instead of (2x+1)*i

cs1=cos((pi*(2*x-1)*(i-1))/(2*M));

Enjoyed Reading? Share Your Views

Previous Post Next Post Home
Google ping Hypersmash.com