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 recwidth)
2、;int main() int i, j; double orgheightwidth, dwtheightwidth,recheightwidth; 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+) orgij = fgetc(lena); twoDDWT(org, dwt,4);
3、 for (i = 0; i height/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+)
4、for (j = 0; j width; j+) fputc(recij, 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
5、, j; double tempheightwidth, temp1heightwidth; 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 1 & j height-2) tempij = f_LPF0 * orgij - 2 + f_LPF1 * orgij - 1 + f_LPF2 * orgij + f_LPF3 * orgij
6、+ 1 + f_LPF4 * orgij + 2; else if (j = height-2) tempij = f_LPF0 * orgij - 2 + f_LPF1 * 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
7、height; i+) for (j = 0; j width/2; j+) dwtij = tempij * 2 + 1; for (i = 0; i height; 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_HPF2 * orgij - 1; for (i = 0; i height; i+
8、) for (j = 0; j width/2; j+) dwtij + width/2 = tempij * 2; if (flag = 1)/horizontal direction for (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 * dw
9、ti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * dwtij + f_LPF3 * dwti + 1j + f_LPF4 * dwtij; else if (i = width-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
10、= 0; i height; i+) for (j = 0; j 0 & i width-1) tempij = f_HPF0 * dwti - 1j + f_HPF1 * dwtij + f_HPF2 * 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
11、height; i+) for (j = width/2; j 1 & i height-2) tempij = f_LPF0 * dwti - 2j + f_LPF1 * dwti - 1j + f_LPF2 * 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 = he
12、ight-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 = 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 * dwt
13、i - 1j + f_HPF1 * dwtij + f_HPF2 * dwti + 1j; else if (i = height-1) tempij = f_HPF0 * dwti - 1j + f_HPF1 * dwtij + 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 (fla
14、g = 2)/vertical direction for (i = 0; i height/2; i+) for (j = 0; j 1 & j height/2-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-2) tempij = f_LPF0 * orgij - 2 + f_LPF1 * orgij - 1 + f_LPF2 * orgij + f_LPF3 * org
15、ij + 1 + f_LPF4 * orgij; else if (j = height/2-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/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) temp
16、ij = 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/2; i+) for (j = 0; j width/4; j+) dwtij + width/4 = tempij * 2; if (flag = 3)/horizontal direction for (i = 0; i height/2; i+)
17、 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; 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; j width/4; j+) temp1ij = tempi * 2 + 1j; for (i = 0; i height/2; i+) for (j = 0; j width/4; j+) if (i = 0) tempij = f_HPF0 * dwti + 1j
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1