📄 waveletetest.m
字号:
function waveleteTest()
% 在实际应用中,首先需要从图像文件中读取图像数据。
% MATLAB使用imread()函数完这一任务。
% 例如,在电脑D盘中有一彩色图像文件lena.jpg,则可由下述语句读取:
X =imread('lena.bmp');
scrsz = get(0,'ScreenSize');
% rect = [left, bottom, width, height];
figure('Position',[20 scrsz(4)/4 scrsz(3)-40 scrsz(4)/2])
subplot(131),imshow(X);
% MATLAB图像处理工具箱支持四种基本图像类型:
% 索引图像、灰度图像、二进制图像和RGB图像。
% MATLAB直接从图像文件中读取的图像为RGB图像。
% 它存储在三维数组中。
% 这个三维数组有三个面,依次对应于红(Red)、绿(Green)、蓝(Blue)三种颜色,
% 而面中的数据则分别是这三种颜色的强度值,面中的元素对应于图像中的像素点。
% 索引图像数据包括图像矩阵X与颜色图数组map,
% 其中颜色图map是按图像中颜色值进行排序后的数组。
% 对于每个像素,图像矩阵X包含一个值,这个值就是颜色图数组map中的索引。
% 颜色图map为m×3双精度矩阵,各行分别指定红、绿、蓝(R、G、B)单色值,
% map=[RGB],R、G、B为值域为[0,1]的实数值,m为索引图像包含的像素个数。
% 然后可根据情况采用不同的小波函数,进行索引图像的分解压缩。
% 我们这里对上面产生的索引图像X用db1小波进行2层分解。
[c,l]=wavedec2(double(X),2,'db1');
% 在这里,一个索引图像作小波分解后,可得到一系列不同分辨率的子图像,不同分辨率
% 的子图像对应的频率是不相同的。高分辨率(即高频细节)子图像上大部分点的数值接
% 近于0,越是高频这种现象越明显。对一个图像来说,表现一个图像最主要的部分是低频
% (即近似)部分。
% 多层小波分解的所有成分系数均保存在向量c中,低频近似与高频细节的系数需从向量c中
% 提取。MATLAB分别使用appcoef2()和detcoef2()函数来完成这一工作。我们这种方法是
% 对低频和高频部分进行处理,因而提取低频和高频近似系数。
cA1=appcoef2(c,l,'db1',1);
cH1=detcoef2('h',c,l,1);
cD1=detcoef2('d',c,l,1);
cV1=detcoef2('v',c,l,1);
subplot(132),imshow(uint8([cA1,cH1;cD1,cV1]));
% MATLAB中重构系数用wrcoef2()函数来完成这一工作。这样就可以重构低频和高频近似系数。
A1=wrcoef2('a',c,l,'db1',1);
H1=wrcoef2('h',c,l,'db1',1);
D1=wrcoef2('d',c,l,'db1',1);
V1=wrcoef2('v',c,l,'db1',1);
c1=[A1 H1;V1 D1];
% 以下是对图像进行压缩:保留第一层低频信息并对其进行量化编码。
% MATLAB中用wcodemat()函数来完成这一过程。
ca1=wcodemat(cA1,440,'mat',0);
ca1=0.5*ca1;
subplot(133),imshow(uint8(ca1));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -