Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Thread Subject:
Image compression using Daubechies Db4 wavelet

Subject: Image compression using Daubechies Db4 wavelet

From: sampath

Date: 8 Feb, 2012 20:56:18

Message: 1 of 1

Hi,
I'm working on a project which is to compress an image using Daubechies Db4 wavelet. I shouldn't use the "conv2" and instead I have to write the iteration equation to find the Approximation, Horizontal, Vertical and Diagonal coefficients. The process is to convolute an image and downsample it horizontally and again convolute it for the second time and again downsample it vertically. I took an image of 64x64. when i convoluted horizontally (horizontal axis) for the first time, the image became 71x64 and after downsampling it became 35x64 which removed all the odd number columns. When i convoluted vertically (vertical axis) i.e. second convolution the image became 35x71 and after downsampling along the vertical axis gave an image of 35x35 theoritically. I tried to form an iteration equation with the obtained pixels of 35x35 approximation coefficient. But i'm getting an error "???
Subscripted assignment dimension mismatch". Can someone please help me out?
Here is my code
%Image compression using Daubechies Db4 wavelet
clc; clear; close all;
r=imread('dsc03.jpg');
r=rgb2gray(r);
s=single(r);


h0=[-0.0106 -0.0329 0.0308 0.1870 -0.0280 -0.6309 0.7148 -0.2304];
h1=[-0.2304 0.7149 0.6309 -0.0280 -0.1870 0.0308 0.0329 -0.0106];
% disp('2D-DWT Decomposition')
%[A,H,V,D]=dwt2(s,'dbaux');
%[A,H,V,D]=dwt2(s,h0,h1);

%[m,n]=size(r); %[m=row n=column]
m=70;
n=70;
for i=1:m
    for j=1:n
        % disp('2D-DWT Decomposition of A using formula')
        Ad(i,j)=[(s(2*i+6,j)*h0(8)+s(2*i+6,j+1)*h0(7)+s(2*i+6,j+2)*h0(6)+s(2*i+6,j+3)*h0(5)+s(2*i+6,j+4)*h0(4)+s(2*i+6,j+5)*h0(3)+s(2*i+6,j+6)*h0(2)+s(2*i+6,j+7)*h0(1))*h0(1)
        +(s(2*i+5,j)*h0(8)+s(2*i+5,j+1)*h0(7)+s(2*i+5,j+2)*h0(6)+s(2*i+5,j+3)*h0(5)+s(2*i+5,j+4)*h0(4)+s(2*i+5,j+5)*h0(3)+s(2*i+5,j+6)*h0(2)+s(2*i+5,j+7)*h0(1))*h0(2)
        +(s(2*i+4,j)*h0(8)+s(2*i+4,j+1)*h0(7)+s(2*i+4,j+2)*h0(6)+s(2*i+4,j+3)*h0(5)+s(2*i+4,j+4)*h0(4)+s(2*i+4,j+5)*h0(3)+s(2*i+4,j+6)*h0(2)+s(2*i+4,j+7)*h0(1))*h0(3)
        +(s(2*i+3,j)*h0(8)+s(2*i+3,j+1)*h0(7)+s(2*i+3,j+2)*h0(6)+s(2*i+3,j+3)*h0(5)+s(2*i+3,j+4)*h0(4)+s(2*i+3,j+5)*h0(3)+s(2*i+3,j+6)*h0(2)+s(2*i+3,j+7)*h0(1))*h0(4)
        +(s(2*i+2,j)*h0(8)+s(2*i+2,j+1)*h0(7)+s(2*i+2,j+2)*h0(6)+s(2*i+2,j+3)*h0(5)+s(2*i+2,j+4)*h0(4)+s(2*i+2,j+5)*h0(3)+s(2*i+2,j+6)*h0(2)+s(2*i+2,j+7)*h0(1))*h0(5)
        +(s(2*i+1,j)*h0(8)+s(2*i+1,j+1)*h0(7)+s(2*i+1,j+2)*h0(6)+s(2*i+1,j+3)*h0(5)+s(2*i+1,j+4)*h0(4)+s(2*i+1,j+5)*h0(3)+s(2*i+1,j+6)*h0(2)+s(2*i+1,j+7)*h0(1))*h0(6)
        +(s(2*i,j)*h0(8)+s(2*i,j+1)*h0(7)+s(2*i,j+2)*h0(6)+s(2*i,j+3)*h0(5)+s(2*i,j+4)*h0(4)+s(2*i,j+5)*h0(3)+s(2*i,j+6)*h0(2)+s(2*i,j+7)*h0(1))*h0(7)
        +(s(2*i-1,j)*h0(8)+s(2*i-1,j+1)*h0(7)+s(2*i-1,j+2)*h0(6)+s(2*i-1,j+3)*h0(5)+s(2*i-1,j+4)*h0(4)+s(2*i-1,j+5)*h0(3)+s(2*i-1,j+6)*h0(2)+s(2*i-1,j+7)*h0(1))*h0(8)];
    end
end

figure
imshow(r)
figure
Atemp=uint8(Ad);
imshow(Atemp)

It worked with Haar wavelet which only two coefficients. Here is the code for Image compression using Haar wavelet.

clc; clear; close all;
disp('2D-DWT Image file *Check workspace')
% disp('2D-DWT using dwt function')
% process sample image file
y=imread('mikan.jpg');
y=rgb2gray(y);
x=single(y); %very important if not x remain in 8bit

h0=[0.7071 0.7071];
h1=[0.7071 -0.7071];
% disp('2D-DWT Decomposition')
[A,H,V,D]=dwt2(x,h0,h1);

[m,n]=size(x); %[m=row n=column]

for i=1:m/2
    for j=1:n/2
        % disp('2D-DWT Decomposition of A using formula')
        Ad(i,j)=(x(2*i-1,2*j-1)+x(2*i-1,2*j)+x(2*i,2*j-1)+x(2*i,2*j))*h0(1)*h0(1);
        
        % disp('2D-DWT Decomposition of H using formula')
        Hd(i,j)=(x(2*i,2*j-1)+x(2*i,2*j))*h0(1)*h0(1)+(x(2*i-1,2*j-1)+x(2*i-1,2*j))*h0(1)*h1(2);
        
        % disp('2D-DWT Decomposition of V using formula')
        Vd(i,j)=(x(2*i-1,2*j)+x(2*i,2*j))*h0(1)*h0(1)+(x(2*i-1,2*j-1)+x(2*i,2*j-1))*h0(1)*h1(2);
        
        % disp('2D-DWT Decomposition of D using formula')
        Dd(i,j)=(x(2*i,2*j))*h0(1)*h0(1)+(x(2*i-1,2*j-1))*h1(2)*h1(2)+(x(2*i-1,2*j)+x(2*i,2*j-1))*h0(1)*h1(2);
    end
end

figure
imshow(y)
figure
Atemp=uint8(Ad);
imshow(Atemp)

Tags for this Thread

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us