小波变换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]; } } } }