clc; clear all; close all;
filename = fullfile(pwd, 'images', 'cameraman.tif');
x = imread(filename);%读取文件图片
num = 2;
[cf_vec, dim_vec] = wavedec_process(x, num, 'haar');%调用函数wavedec_process
th = 10;
y = waverec_process(cf_vec, dim_vec, 'haar', th);%调用函数waverec_process
output_img(x, y, filename, th, 'png');%输出图片
p = PSNR(x,y);%信噪比
fprintf('\n压缩前后图像的PSNR值为%.2f\n', p);
function [ya, yd] = dwt_process(x, lf, hf, num)
x = double(x);
ya = x;
yd = [];
for i = 1 : num
yli = conv(ya,lf);
yai = downsample_prcoess(yli);
yhi = conv(ya, hf);
ydi = downsample_prcoess(yhi);
function y = idwt_process(ya, yd, lf, hf)
alen = length(ya);
dlen = length(yd);
while dlen - alen >= 0
yai = upsample_prcoess(ya);
yai = conv(yai, lf);
ydi = yd(dlen-alen+1:dlen);
ydi = upsample_prcoess(ydi);
ydi = conv(ydi, hf);
ya = yai + ydi;
yd = yd(1:dlen-alen);
function [cf_vec, dim_vec] = wavedec_process(x, num, wave_name)
if ndims(x) == 3
x = rgb2gray(x);
end
[lf, hf] = wfilters(wave_name, 'd');
o = x;
x = double(x);
cf_vec = [];
dim_vec = size(x);
for i = 1 : num
[ya, yv, yh, yd] = dwt2_process(x, lf, hf);
tmp = {yv; yh; yd};
dim_vec = [size(yv); dim_vec];
cf_vec=[tmp; cf_vec];
x = ya;
end
end
function S=PSNR(s,t)
[m, n, ~]=size(s);
s = im2uint8(mat2gray(s));
t = im2uint8(mat2gray(t));
s = double(s);
t = double(t);
sd = 0;
mi = m*n*max(max(s.^2));
for u = 1:m
for v = 1:n
sd = sd+(s(u,v)-t(u,v))^2;
end
end
if sd == 0
sd = 1;
end
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.