小波变换C语言实现代码

小波变换C语言实现代码
小波变换C语言实现代码

#include

#include

#define height 256

#define width 256

void twoDDWT(double org[][width], double dwt[][width],int NumofBand); void oneDDWT(int flag, double org[][width], double dwt[][width]);

void twoDIDWT(double dwt[][width], double rec[][width],int NumofBand); void oneDIDWT(int flag, double dwt[][width], double rec[][width]);

int main()

{

int i, j;

double org[height][width], dwt[height][width],rec[height][width];

FILE *lena;

FILE *lena3;

FILE *lena4;

lena = fopen("c:\\lena.raw", "rb");

lena3 = fopen("c:\\lena3.raw", "wb");

lena4 = fopen("c:\\lena4.raw", "wb");

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

org[i][j] = fgetc(lena);

}

}

twoDDWT(org, dwt,4);

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/2; j++)

{

org[i][j]=dwt[i][j];

}

}

twoDDWT(org, dwt,7);

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

fputc(dwt[i][j], lena3);

}

}

twoDIDWT(dwt, rec,7);

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/2; j++)

{

dwt[i][j]=rec[i][j];

}

}

twoDIDWT(dwt, rec,4);

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

fputc(rec[i][j], lena4);

}

}

return 0;

}

void twoDDWT(double org[][width], double dwt[][width],int NumofBand)

{

if (NumofBand==4)

{

oneDDWT(0, org, dwt);

oneDDWT(1, org, dwt);

}

if (NumofBand==7)

{

oneDDWT(2, org, dwt);

oneDDWT(3, org, dwt);

}

}

void oneDDWT(int flag, double org[][width], double dwt[][width])

{

int i, j;

double temp[height][width], temp1[height][width];

double f_LPF[] = { -0.125, 0.25, 0.75, 0.25, -0.125 };

double f_HPF[] = { -0.5, 1, -0.5 };

if (flag == 0)//vertical direction

{

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

if (j == 0)

temp[i][j] = f_LPF[0] * org[i][j + 2] + f_LPF[1] * org[i][j + 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j + 1] + f_LPF[4] * org[i][j + 2];

elseif (j == 1)

temp[i][j] = f_LPF[0] * org[i][j] + f_LPF[1] * org[i][j - 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j + 1] + f_LPF[4] * org[i][j + 2];

elseif (j > 1 && j < height-2)

temp[i][j] = f_LPF[0] * org[i][j - 2] + f_LPF[1] * org[i][j - 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j + 1] + f_LPF[4] * org[i][j + 2];

elseif (j == height-2)

temp[i][j] = f_LPF[0] * org[i][j - 2] + f_LPF[1] * org[i][j - 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j + 1] + f_LPF[4] * org[i][j];

elseif (j == height-1)

temp[i][j] = f_LPF[0] * org[i][j - 2] + f_LPF[1] * org[i][j - 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j - 1] + f_LPF[4] * org[i][j - 2];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

dwt[i][j] = temp[i][j * 2 + 1];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

if (j == 0)

temp[i][j] = f_HPF[0] * org[i][j + 1] + f_HPF[1] * org[i][j] + f_HPF[2] * org[i][j + 1];

elseif (j > 0 && j < height-1)

temp[i][j] = f_HPF[0] * org[i][j - 1] + f_HPF[1] * org[i][j] + f_HPF[2] * org[i][j + 1];

elseif (j == height-1)

temp[i][j] = f_HPF[0] * org[i][j - 1] + f_HPF[1] * org[i][j] + f_HPF[2] * org[i][j - 1];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

dwt[i][j + width/2] = temp[i][j * 2];

}

}

}

if (flag == 1)//horizontal direction

{

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i == 0)

temp[i][j] = f_LPF[0] * dwt[i + 2][j] + f_LPF[1] * dwt[i + 1][j] + f_LPF[2] * dwt[i][j] +

f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i == 1)

temp[i][j] = f_LPF[0] * dwt[i][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i > 1 && i < width-2)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i == width-2)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i][j];

elseif (i == width-1)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i - 1][j] + f_LPF[4] * dwt[i - 2][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

temp1[i][j] = temp[i * 2 + 1][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i == 0)

temp[i][j] = f_HPF[0] * dwt[i + 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i + 1][j];

elseif (i > 0 && i < width-1)

temp[i][j] = f_HPF[0] * dwt[i - 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i + 1][j];

elseif (i == width-1)

temp[i][j] = f_HPF[0] *dwt[i - 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i - 1][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

temp1[i][j+width/2] = temp[i * 2][j];

}

}

for (i = 0; i < height; i++)

{

for (j = width/2; j < width; j++)

{

if (i == 0)

temp[i][j] = f_LPF[0] * dwt[i + 2][j] + f_LPF[1] * dwt[i + 1][j] + f_LPF[2] * dwt[i][j] +

f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i == 1)

temp[i][j] = f_LPF[0] * dwt[i][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i > 1 && i < height-2)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i == height-2)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i][j];

elseif (i == height-1)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i - 1][j] + f_LPF[4] * dwt[i - 2][j];

}

}

for (i = 0; i < height; i++)

{

for (j = width/2; j < width; j++)

{

temp1[i+height/2][j-width/2] = temp[i * 2 + 1][j];

}

}

for (i = 0; i < height; i++)

{

for (j = width/2; j < width; j++)

{

if (i == 0)

temp[i][j] = f_HPF[0] * dwt[i + 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i + 1][j];

elseif (i > 0 && i < height-1)

temp[i][j] = f_HPF[0] * dwt[i - 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i + 1][j];

elseif (i == height-1)

temp[i][j] = f_HPF[0] * dwt[i - 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i - 1][j];

}

}

for (i = 0; i < height; i++)

{

for (j = width/2; j < width; j++)

{

temp1[i +height/2][j] = temp[i * 2][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

dwt[i][j] = temp1[i][j];

}

}

}

if (flag == 2)//vertical direction

{

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width; j++)

{

if (j == 0)

temp[i][j] = f_LPF[0] * org[i][j + 2] + f_LPF[1] * org[i][j + 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j + 1] + f_LPF[4] * org[i][j + 2];

elseif (j == 1)

temp[i][j] = f_LPF[0] * org[i][j] + f_LPF[1] * org[i][j - 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j + 1] + f_LPF[4] * org[i][j + 2];

elseif (j > 1 && j < height/2-2)

temp[i][j] = f_LPF[0] * org[i][j - 2] + f_LPF[1] * org[i][j - 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j + 1] + f_LPF[4] * org[i][j + 2];

elseif (j == height/2-2)

temp[i][j] = f_LPF[0] * org[i][j - 2] + f_LPF[1] * org[i][j - 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j + 1] + f_LPF[4] * org[i][j];

elseif (j == height/2-1)

temp[i][j] = f_LPF[0] * org[i][j - 2] + f_LPF[1] * org[i][j - 1] + f_LPF[2] * org[i][j] + f_LPF[3] * org[i][j - 1] + f_LPF[4] * org[i][j - 2];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

dwt[i][j] = temp[i][j * 2 + 1];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/2; j++)

{

if (j == 0)

temp[i][j] = f_HPF[0] * org[i][j + 1] + f_HPF[1] * org[i][j] + f_HPF[2] * org[i][j + 1];

elseif (j > 0 && j < height-1)

temp[i][j] = f_HPF[0] * org[i][j - 1] + f_HPF[1] * org[i][j] + f_HPF[2] * org[i][j + 1];

elseif (j == height-1)

temp[i][j] = f_HPF[0] * org[i][j - 1] + f_HPF[1] * org[i][j] + f_HPF[2] * org[i][j - 1];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

dwt[i][j + width/4] = temp[i][j * 2];

}

}

}

if (flag == 3)//horizontal direction

{

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i == 0)

temp[i][j] = f_LPF[0] * dwt[i + 2][j] + f_LPF[1] * dwt[i + 1][j] + f_LPF[2] * dwt[i][j] +

f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i == 1)

temp[i][j] = f_LPF[0] * dwt[i][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i > 1 && i < height/2-2)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i == height/2-2)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i][j];

elseif (i == height/2-1)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i - 1][j] + f_LPF[4] * dwt[i - 2][j];

}

}

for (i = 0; i < height/4; i++)

{

for (j = 0; j < width/4; j++)

{

temp1[i][j] = temp[i * 2 + 1][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i == 0)

temp[i][j] = f_HPF[0] * dwt[i + 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i + 1][j];

elseif (i > 0 && i < height/2-1)

temp[i][j] = f_HPF[0] * dwt[i - 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i + 1][j];

elseif (i == height/2-1)

temp[i][j] = f_HPF[0] * dwt[i - 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i - 1][j];

}

}

for (i = 0; i < height/4; i++)

{

for (j = 0; j < width/4; j++)

{

temp1[i + height/4][j] = temp[i * 2][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = width/4; j < width/2; j++)

{

if (i == 0)

temp[i][j] = f_LPF[0] * dwt[i + 2][j] + f_LPF[1] * dwt[i + 1][j] + f_LPF[2] * dwt[i][j] +

f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i == 1)

temp[i][j] = f_LPF[0] * dwt[i][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i > 1 && i < height/2-2)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i + 2][j];

elseif (i == height/2-2)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i + 1][j] + f_LPF[4] * dwt[i][j];

elseif (i == height/2-1)

temp[i][j] = f_LPF[0] * dwt[i - 2][j] + f_LPF[1] * dwt[i - 1][j] + f_LPF[2] * dwt[i][j] + f_LPF[3] * dwt[i - 1][j] + f_LPF[4] * dwt[i - 2][j];

}

}

for (i = 0; i < height/4; i++)

{

for (j = width/4; j < width/2; j++)

{

temp1[i][j] = temp[i * 2 + 1][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = width/4; j < width/2; j++)

{

if (i == 0)

temp[i][j] = f_HPF[0] * dwt[i + 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i + 1][j];

elseif (i > 0 && i < width/2-1)

temp[i][j] = f_HPF[0] * dwt[i - 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i + 1][j];

elseif (i == width/2)

temp[i][j] = f_HPF[0] * dwt[i - 1][j] + f_HPF[1] * dwt[i][j] + f_HPF[2] * dwt[i - 1][j];

}

}

for (i = 0; i < height/4; i++)

{

for (j = width/4; j < width/2; j++)

{

temp1[i + height/4][j] = temp[i * 2][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/2; j++)

{

dwt[i][j] = temp1[i][j];

}

}

}

}

void twoDIDWT(double dwt[][width], double rec[][width],int NumofBand) {

if (NumofBand==7)

{

oneDIDWT(2, dwt, rec);

oneDIDWT(3, dwt, rec);

}

if (NumofBand==4)

{

oneDIDWT(1, dwt, rec);

oneDIDWT(0, dwt, rec);

}

}

void oneDIDWT(int flag, double dwt[][width], double rec[][width])

{

int i, j;

double temp[height][width], temp1[height][width];

double i_LPF[] = { 0.5, 1, 0.5 };

double i_HPF[] = { -0.125, -0.25, 0.75, -0.25, -0.125 };

if (flag == 2)//horizontal direction

{

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i % 2 == 1)

temp[i][j] = dwt[i / 2][j];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i == 0)

rec[i][j] = i_LPF[0] * temp[i + 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i + 1][j];

elseif (i > 0 && i < height/2-1)

rec[i][j] = i_LPF[0] * temp[i - 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i + 1][j];

elseif (i == height/2-1)

rec[i][j] = i_LPF[0] * temp[i - 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i - 1][j];

}

}

for (i = height/4; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

dwt[i - height/4][j] = dwt[i][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i % 2 == 0)

temp[i][j] = dwt[i / 2][j];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i == 0)

temp1[i][j] = i_HPF[0] * temp[i + 2][j] + i_HPF[1] * temp[i + 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i == 1)

temp1[i][j] = i_HPF[0] * temp[i][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i > 1 && i < height/2-2)

temp1[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i == height/2-2)

temp1[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i][j];

elseif (i == height/2-1)

temp1[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i - 1][j] + i_HPF[4] * temp[i - 2][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

rec[i][j] = rec[i][j] + temp1[i][j];

}

}

for (i = 0; i < height/4; i++)

{

for (j = width/4; j < width/2; j++)

{

dwt[i][j - height/4] = dwt[i][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i % 2 == 1)

temp[i][j] = dwt[i / 2][j];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i == 0)

temp1[i][j] = i_LPF[0] * temp[i + 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i + 1][j];

elseif (i > 0 && i < height/2-1)

temp1[i][j] = i_LPF[0] * temp[i - 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i + 1][j];

elseif (i == height/2-1)

temp1[i][j] = i_LPF[0] * temp[i - 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i - 1][j];

}

}

for (i = height/4; i < height/2; i++)

{

for (j = width/4; j < width/2; j++)

{

dwt[i - height/4][j - width/4] = dwt[i][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i % 2 == 0)

temp[i][j] = dwt[i / 2][j];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

if (i == 0)

dwt[i][j] = i_HPF[0] * temp[i + 2][j] + i_HPF[1] * temp[i + 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i == 1)

dwt[i][j] = i_HPF[0] * temp[i][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i > 1 && i < height/2-2)

dwt[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i == height/2-2)

dwt[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i][j];

elseif (i == height/2-1)

dwt[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i - 1][j] + i_HPF[4] * temp[i - 2][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/4; j++)

{

rec[i][j + width/4] = temp1[i][j] + dwt[i][j];

}

}

}

if (flag == 3)//vertical direction

{

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/2; j++)

{

if (j % 2 == 1)

temp[i][j] = rec[i][j / 2];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/2; j++)

{

if (j == 0)

temp1[i][j] = i_LPF[0] * temp[i][j + 1] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i][j + 1];

elseif (j > 0 && j < height/2-1)

temp1[i][j] = i_LPF[0] * temp[i][j - 1] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i][j + 1];

elseif (j == height/2-1)

temp1[i][j] = i_LPF[0] * temp[i][j - 1] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i][j - 1];

}

}

for (i = 0; i < height/2; i++)

{

for (j = width/4; j < width/2; j++)

{

rec[i][j - width/4] = rec[i][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/2; j++)

{

if (j % 2 == 0)

temp[i][j] = rec[i][j / 2];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height/2; i++)

{

for (j = 0; j < width/2; j++)

{

if (j == 0)

rec[i][j] = i_HPF[0] * temp[i][j + 2] + i_HPF[1] * temp[i][j + 1] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i][j + 1] + i_HPF[4] * temp[i][j + 2];

elseif (j == 1)

rec[i][j] = i_HPF[0] * temp[i][j] + i_HPF[1] * temp[i][j - 1] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i][j + 1] + i_HPF[4] * temp[i][j + 2];

elseif (j > 1 && j < height/2-2)

rec[i][j] = i_HPF[0] * temp[i][j - 2] + i_HPF[1] * temp[i][j - 1] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i][j + 1] + i_HPF[4] * temp[i][j + 2];

elseif (j == height/2-2)

rec[i][j] = i_HPF[0] * temp[i][j - 2] + i_HPF[1] * temp[i][j - 1] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i][j + 1] + i_HPF[4] * temp[i][j];

elseif (j == height/2-1)

rec[i][j] = i_HPF[0] * temp[i][j - 2] + i_HPF[1] * temp[i][j - 1] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i][j - 1] + i_HPF[4] * temp[i][j - 2];

}

}

for (i = 0; i

{

for (j = 0; j < width/2; j++)

{

rec[i][j] = rec[i][j] + temp1[i][j];

}

}

}

if (flag == 1)//horizontal direction

{

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i % 2 == 1)

temp[i][j] = dwt[i / 2][j];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i == 0)

rec[i][j] = i_LPF[0] * temp[i + 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i + 1][j];

elseif (i > 0 && i < height-1)

rec[i][j] = i_LPF[0] * temp[i - 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i + 1][j];

elseif (i == height-1)

rec[i][j] = i_LPF[0] * temp[i - 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i - 1][j];

}

}

for (i = 0; i < height/2; i++)

{

for (j = width/2; j < width; j++)

{

dwt[i][j - height/2] = dwt[i][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i % 2 == 0)

temp[i][j] = dwt[i / 2][j];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i == 0)

temp1[i][j] = i_HPF[0] * temp[i + 2][j] + i_HPF[1] * temp[i + 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i == 1)

temp1[i][j] = i_HPF[0] * temp[i][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i > 1 && i < height-2)

temp1[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i == height-2)

temp1[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i][j];

elseif (i == height-1)

temp1[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i - 1][j] + i_HPF[4] * temp[i - 2][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

rec[i][j] = rec[i][j] + temp1[i][j];

}

}

for (i = height/2; i

{

for (j = 0; j < width/2; j++)

{

dwt[i - width/2][j] = dwt[i][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i % 2 == 1)

temp[i][j] = dwt[i / 2][j];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i == 0)

temp1[i][j] = i_LPF[0] * temp[i + 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i + 1][j];

elseif (i > 0 && i < height-1)

temp1[i][j] = i_LPF[0] * temp[i - 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i + 1][j];

elseif (i == height-1)

temp1[i][j] = i_LPF[0] * temp[i - 1][j] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i - 1][j];

}

}

for (i = height/2; i < height; i++)

{

for (j = width/2; j < width; j++)

{

dwt[i - height/2][j - width/2] = dwt[i][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i % 2 == 0)

temp[i][j] = dwt[i / 2][j];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

if (i == 0)

dwt[i][j] = i_HPF[0] * temp[i + 2][j] + i_HPF[1] * temp[i + 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i == 1)

dwt[i][j] = i_HPF[0] * temp[i][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i > 1 && i < height-2)

dwt[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i + 2][j];

elseif (i == height-2)

dwt[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i + 1][j] + i_HPF[4] * temp[i][j];

elseif (i == height-1)

dwt[i][j] = i_HPF[0] * temp[i - 2][j] + i_HPF[1] * temp[i - 1][j] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i - 1][j] + i_HPF[4] * temp[i - 2][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width/2; j++)

{

rec[i][j + width/2] = temp1[i][j] + dwt[i][j];

}

}

}

if (flag == 0)//vertical direction

{

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

if (j % 2 == 1)

temp[i][j] = rec[i][j / 2];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

if (j == 0)

temp1[i][j] = i_LPF[0] * temp[i][j + 1] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i][j + 1];

elseif (j > 0 && j < height-1)

temp1[i][j] = i_LPF[0] * temp[i][j - 1] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i][j + 1];

elseif (j == height-1)

temp1[i][j] = i_LPF[0] * temp[i][j - 1] + i_LPF[1] * temp[i][j] + i_LPF[2] * temp[i][j - 1];

}

}

for (i = 0; i < height; i++)

{

for (j = width/2; j < width; j++)

{

rec[i][j - width/2] = rec[i][j];

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

if (j % 2 == 0)

temp[i][j] = rec[i][j / 2];

else

temp[i][j] = 0;

}

}

for (i = 0; i < height; i++)

{

for (j = 0; j < width; j++)

{

if (j == 0)

rec[i][j] = i_HPF[0] * temp[i][j + 2] + i_HPF[1] * temp[i][j + 1] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i][j + 1] + i_HPF[4] * temp[i][j + 2];

elseif (j == 1)

rec[i][j] = i_HPF[0] * temp[i][j] + i_HPF[1] * temp[i][j - 1] + i_HPF[2] * temp[i][j] + i_HPF[3] * temp[i][j + 1] + i_HPF[4] * temp[i][j + 2];

elseif (j > 1 && j < height-2)

rec[i][j] = i_HPF[0] * temp[i][j - 2] + i_HPF[1] * temp[i][j - 1] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i][j + 1] + i_HPF[4] * temp[i][j + 2];

elseif (j == height-2)

rec[i][j] = i_HPF[0] * temp[i][j - 2] + i_HPF[1] * temp[i][j - 1] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i][j + 1] + i_HPF[4] * temp[i][j];

elseif (j == height-1)

rec[i][j] = i_HPF[0] * temp[i][j - 2] + i_HPF[1] * temp[i][j - 1] + i_HPF[2] * temp[i][j] +

i_HPF[3] * temp[i][j - 1] + i_HPF[4] * temp[i][j - 2];

}

}

for (i = 0; i

{

for (j = 0; j < width; j++)

{

rec[i][j] = rec[i][j] + temp1[i][j];

}

}

}

}

相关主题
相关文档
最新文档