gusucode.com > 97小波变换反变换源码程序 > 97小波变换反变换源码程序/code/dwt.m
%2D integer 9/7 DWT %fn=fopen('sensin.img','rb'); %I=fread(fn,[256,256]); %I=I'; %fclose(fn); clc; clear; close all; level=3; I=rgb2gray(imread('test.jpg')); I=uint16(I); J=int16(I); [m,n]=size(I); w=n; h=m; for l=1:level w=w/2; h=h/2; for i=1:2*h x=J(i,1:2*w); d(1)=x(2)-floor(-1.0/16 * (x(3) + x(5)) + 9.0/16 * (x(1) + x(3)) + 0.5); for j=2:w-2 d(j)=x(2*j)-floor(-1.0/16 * (x(2*j-3) + x(2*j+3)) + 9.0/16 * (x(2*j-1) + x(2*j+1)) + 0.5); end d(w-1)=x(2*w-2)-floor(-1.0/16 * (x(2*w-5) + x(2*w-1)) + 9.0/16 * (x(2*w-1) + x(2*w-3)) + 0.5); d(w)=x(2*w)-floor(-1.0/8 * x(2*w-3) + 9.0/8 * x(2*w-1) + 0.5); c(1)=x(1)-floor(-1.0/2 * d(1) + 0.5); for j=2:w c(j) = x(2*j-1) - floor(-0.25 * (d(j-1) +d(j)) +0.5); end I(i,1:w) = c(1:w); I(i,(w+1):2*w)=d(1:w).^2; J(i,1:w) = c(1:w); J(i,(w+1):2*w)=d(1:w); end for j=1:2*w y=J(1:2*h,j); d(1)=y(2)-floor(-1.0/16 * (y(3) + y(5)) + 9.0/16 * (y(1) + y(3)) + 0.5); for i=2:h-2 d(i)=y(2*i)-floor(-1.0/16 * (y(2*i-3) + y(2*i+3)) + 9.0/16 * (y(2*i-1) + y(2*i+1)) + 0.5); end d(h-1)=y(2*h-2)-floor(-1.0/16 * (y(2*h-5) + y(2*h-1)) + 9.0/16 * (y(2*h-1) + y(2*h-3)) + 0.5); d(h)=y(2*h)-floor(-1.0/8 * y(2*h-3) + 9.0/8 * y(2*h-1) + 0.5); c(1)=y(1)-floor(-1.0/2 * d(1) + 0.5); for i=2:h c(i) = y(2*i-1) - floor(-0.25 * (d(i-1) +d(i)) +0.5); end if j<=w I(1:2*h,j) = [c(1:h),d(1:h).^2]'; else I(1:2*h,j) = [c(1:h).^2,d(1:h).^2]'; end J(1:2*h,j) = [c(1:h),d(1:h)]'; end end imshow(uint8(I)); save DWT97.mat J