1、小波变换C语言实现代码#include #include #define height 256#define width 256void twoDDWT( double orgwidth, double dwtwidth, int NumofBand); void oneDDWT( int flag, double orgwidth, double dwtwidth);void twoDIDWT( double dwtwidth, double recwidth, int NumofBand); void oneDIDWT( int flag, double dwtwidth, double
2、recwidth);int main()int i, j;double orgheightwidth, dwtheightwidth,recheightwidth;FILE *lena;FILE *lena3;FILE *lena4;lena = fopen( c: , rb);lena3 = fopen( c: , wb );lena4 = fopen( c: , wb );for (i = 0; i height; i+)for (j = 0; j width; j+)orgij = fgetc(lena);twoDDWT(org, dwt,4);for (i = 0; i height/
3、2; i+)for (j = 0; j width/2; j+)orgij=dwtij;twoDDWT(org, dwt,7);for (i = 0; i height; i+)for (j = 0; j width; j+)fputc(dwtij, lena3);twoDIDWT(dwt, rec,7);for (i = 0; i height/2; i+)for (j = 0; j width/2; j+)dwtij=recij;twoDIDWT(dwt, rec,4);for (i = 0; i height; i+)for (j = 0; j width; j+)fputc(recij
4、, lena4); return 0;void twoDDWT( double orgwidth, double dwtwidth, 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 orgwidth, double dwtwidth)int i, j;double tempheightwidth, temp1heightwi
5、dth;double f_LPF = , , , , ;double f_HPF = , 1, ;if (flag = 0) /vertical directionfor (i = 0; i height; i+)for (j = 0; j 1 & j height-2)tempij = f_LPF0 * orgij - 2 + f_LPF1 * orgij - 1 + f_LPF2 * orgij + f_LPF3 * orgij + 1 + f_LPF4 * orgij + 2;else if (j = height-2)tempij = f_LPF0 * orgij - 2 + f_LP
6、F1 * orgij - 1 + f_LPF2 * orgij + f_LPF3 * orgij + 1 + f_LPF4 * orgij;else if (j = height-1)tempij = f_LPF0 * orgij - 2 + f_LPF1 * orgij - 1 + f_LPF2 * orgij + f_LPF3 * orgij - 1 + f_LPF4 * orgij - 2;for (i = 0; i height; i+)for (j = 0; j width/2; j+)dwtij = tempij * 2 + 1;for (i = 0; i height; i+)f
7、or (j = 0; j 0 & j height-1)tempij = f_HPF0 * orgij - 1 + f_HPF1 * orgij + f_HPF2 * orgij + 1;else if (j = height-1) tempij = f_HPF0 * orgij - 1 + f_HPF1 * orgij + f_HPF2 * orgij - 1;for (i = 0; i height; i+)for (j = 0; j width/2; j+)dwtij + width/2 = tempij * 2;if (flag = 1) /horizontal directionfo
8、r (i = 0; i height; i+)for (j = 0; j 1 & i width-2) tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * dwtij + f_LPF3* dwti + 1j + f_LPF4 * dwti + 2j;else if (i = width-2) tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * dwtij + f_LPF3 * dwti + 1j + f_LPF4 * dwtij;else if (i = wi
9、dth-1) tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * dwtij + f_LPF3 * dwti - 1j + f_LPF4 * dwti - 2j;for (i = 0; i height; i+) for (j = 0; j width; j+) temp1ij = tempi * 2 + 1j;for (i = 0; i height; i+) for (j = 0; j 0 & i width-1) tempij = f_HPF0 * dwti - 1j + f_HPF1 * dwtij + f_HPF2
10、* dwti + 1j;else if (i = width-1) tempij = f_HPF0 *dwti - 1j + f_HPF1 * dwtij + f_HPF2 * dwti - 1j;for (i = 0; i height; i+) for (j = 0; j width/2; j+) temp1ij+width/2 = tempi * 2j;for (i = 0; i height; i+)for (j = width/2; j 1 & i height-2) tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2
11、* dwtij + f_LPF3 * dwti + 1j + f_LPF4 * dwti + 2j;else if (i = height-2) tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * dwtij + f_LPF3* dwti + 1j + f_LPF4 * dwtij;else if (i = height-1) tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * dwtij + f_LPF3* dwti - 1j + f_LPF4 * dwti
12、 - 2j;for (i = 0; i height; i+)for (j = width/2; j width; j+) temp1i+height/2j-width/2 = tempi * 2 + 1j;for (i = 0; i height; i+)for (j = width/2; j 0 & i height-1) tempij = f_HPF0 * dwti - 1j + f_HPF1 * dwtij + f_HPF2 * dwti + 1j; else if (i = height-1)tempij = f_HPF0 * dwti - 1j + f_HPF1 * dwtij +
13、 f_HPF2 * dwti - 1j;for (i = 0; i height; i+)for (j = width/2; j width; j+)temp1i +height/2j = tempi * 2j;for (i = 0; i height; i+)for (j = 0; j width; j+)dwtij = temp1ij;if (flag = 2) /vertical directionfor (i = 0; i height/2; i+)for (j = 0; j 1 & j height/2-2)tempij = f_LPF0 * orgij - 2 + f_LPF1 *
14、 orgij - 1 + f_LPF2 * orgij + f_LPF3 * orgij + 1 + f_LPF4 * orgij + 2;else if (j = height/2-2)tempij = f_LPF0 * orgij - 2 + f_LPF1 * orgij - 1 + f_LPF2 * orgij + f_LPF3 * orgij + 1 + f_LPF4 * orgij;else if (j = height/2-1)tempij = f_LPF0 * orgij - 2 + f_LPF1 * orgij - 1 + f_LPF2 * orgij + f_LPF3 * o
15、rgij - 1 + f_LPF4 * orgij - 2;for (i = 0; i height/2; i+)for (j = 0; j width/4; j+) dwtij = tempij * 2 + 1;for (i = 0; i height/2; i+)for (j = 0; j 0 & j height-1)tempij = f_HPF0 * orgij - 1 + f_HPF1 * orgij + f_HPF2 * orgij + 1; else if (j = height-1)tempij = f_HPF0 * orgij - 1 + f_HPF1 * orgij + f
16、_HPF2 * orgij - 1;for (i = 0; i height/2; i+)for (j = 0; j width/4; j+)dwtij + width/4 = tempij * 2;if (flag = 3) /horizontal directionfor (i = 0; i height/2; i+)for (j = 0; j 1 & i height/2-2)tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * dwtij + f_LPF3* dwti + 1j + f_LPF4 * dwti + 2j;
17、 else if (i = height/2-2)tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * dwtij + f_LPF3 * dwti + 1j + f_LPF4 * dwtij;else if (i = height/2-1)tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * dwtij + f_LPF3 * dwti - 1j + f_LPF4 * dwti - 2j;for (i = 0; i height/4; i+)for (j = 0;
18、j width/4; j+) temp1ij = tempi * 2 + 1j;for (i = 0; i height/2; i+)for (j = 0; j 0 & i height/2-1)tempij = f_HPF0 * dwti - 1j + f_HPF1 * dwtij + f_HPF2 * dwti + 1j; else if (i = height/2-1)tempij = f_HPF0 * dwti - 1j + f_HPF1 * dwtij + f_HPF2 * dwti - 1j; for (i = 0; i height/4; i+)for (j = 0; j width/4; j+) temp1i + height/4j = tempi * 2j;for (i = 0; i height/2; i+)for (j = width/4; j 1 & i height/2-2)tempij = f_LPF0 * dwti - 2j + f_LP
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1