【精品】为了实现图像的N层分解【精品】为了实现图像的N层分解
首先,为了实现图像的N层分解,对一幅m行n列的黑白图像,我们要对其进行规范化处理,使其能被2的N次方整除。以下的modmat() 函数实现此功能: function y=modmat(x,dim)
% 函数 MODMAT() 对输入矩阵x进行规范化,使其行列数均能被 2^dim 整除 % 输入参数:x —— r*c 维矩阵;
% dim —— 矩阵重构的维数
% 输出参数:y —— rt*ct 维矩阵,mod(rt,2^dim)=0,mod(ct,2^dim)=0
[row...
【精品】为了实现图像的N层分解
首先,为了实现图像的N层分解,对一幅m行n列的黑白图像,我们要对其进行规范化处理,使其能被2的N次方整除。以下的modmat() 函数实现此功能: function y=modmat(x,dim)
% 函数 MODMAT() 对输入矩阵x进行规范化,使其行列数均能被 2^dim 整除 % 输入参数:x —— r*c 维矩阵;
% dim —— 矩阵重构的维数
% 输出参数:y —— rt*ct 维矩阵,mod(rt,2^dim)=0,mod(ct,2^dim)=0
[row,col]=size(x); % 求出输入矩阵的行列数row,col rt=row - mod(row,2^dim); % 将row,col分别减去本身模 2^dim 得到的数 ct=col - mod(col,2^dim); % 所得的差为rt、ct,均能被 2^dim 整除 y=x(1:rt,1:ct); % 输出矩阵 y 为输入矩阵 x 的 rt*ct 维子矩阵
然后,将规范化后的图像的数据格式由适合显示图像的uint8格式转换为适合数值处理的double格式,再调用二维小波分解函数进行图像分解,最后为了清晰地显示分解图像的塔式结构,在图像的相应区域绘制若干分界线。具体程序如下:
function y=mywavedec2(x,dim) % 函数 MYWAVEDEC2() 对输入矩阵 x 进行 dim 层分解,得到相应的分解系数矩阵 y
% 输入参数:x —— 输入矩阵;
% dim —— 分解层数。
% 输出参数:y —— 分解系数矩阵。
x=modmat(x,dim); % 首先规范化输入矩阵,使其行列数均能被 2^dim 整除
subplot(121);imshow(x);title('原始图像'); % 画出规范化后的源图像 [m,n]=size(x); % 求出规范化矩阵x的行列数
xd=double(x); % 将矩阵x的数据格式转换为适合数值处理的double格式
for i=1:dim
xd=modmat(xd,1);
[dLL,dHL,dLH,dHH]=mydwt2(xd); % 矩阵小波分解
tmp=[dLL,dHL;dLH,dHH]; % 将分解系数存入缓存矩阵
xd=dLL; % 将缓存矩阵左上角部分的子矩阵作为下一层分解的源矩阵
[row,col]=size(tmp); % 求出缓存矩阵的行列数
y(1:row,1:col)=tmp; % 将缓存矩阵存入输出矩阵的相应行列
end
yd=uint8(y); % 将输出矩阵的数据格式转换为适合显示图像的uint8格式
for i=1:dim % 对矩阵 yd 进行分界线处理,画出分解图像的分界线
m=m-mod(m,2);
n=n-mod(n,2);
yd(m/2,1:n)=255;
yd(1:m,n/2)=255;
m=m/2;n=n/2;
end
subplot(122);imshow(yd);title([ num2str(dim) ' 维小波分解图像']);
上述的图像分解程序,其输出数据是double格式的,以便作为重构程序的输入。
本文档为【【精品】为了实现图像的N层分解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。