新奇特汽车用品潮王路:MATLAB小波图像重构

来源:百度文库 编辑:中财网 时间:2024/04/27 05:13:57

接下来我们讨论图像的重构。我编写的重构程序中,为了比较分解图像和重构图像,首先绘出经过小波分解的图像,然后再进行重构。在绘制分解图像和重构图像的过程中,要注意数据格式的转换。

function y=mywaverec2(x,dim)

% 函数 MYWAVEREC2() 对输入的分解系数矩阵x进行 dim 层重构,得到重构矩阵 y

% 输入参数:x ——分解系数矩阵;

%           dim ——重构层数;

% 输出参数:y ——重构矩阵。

% 绘制分解图像

xd=uint8(x);            % 将输入矩阵的数据格式转换为适合显示图像的uint8格式

[m,n]=size(x);         % 求出输入矩阵的行列数

for i=1:dim             % 对转换矩阵xd进行分界线处理

    m=m-mod(m,2);

    n=n-mod(n,2);

    xd(m/2,1:n)=255;

    xd(1:m,n/2)=255;

    m=m/2;n=n/2;

end

figure;

subplot(121);imshow(xd);title([ num2str(dim) ' 层小波分解图像']); % 画出带有分界线的分解图像

% 重构图像

xr=double(x);           % 将输入矩阵的数据格式转换回适合数值处理的double格式

[row,col]=size(xr);     % 求出转换矩阵xr的行列数

for i=dim:-1:1          % 重构次序是从内层往外层进行,所以先抽取矩阵 xr 的最内层分解矩阵进行重构

    tmp=xr(1:floor(row/2^(i-1)),1:floor(col/2^(i-1)));       % 重构的内层矩阵的行列数均为矩阵xr的2^(i-1)

    [rt1,ct1]=size(tmp);                         % 读取待重构矩阵 tmp 的行列数

    rt=rt1-mod(rt1,2);ct=ct1-mod(ct1,2);

    rLL=tmp(1:rt/2,1:ct/2);                    % 将待重构矩阵 tmp 分解为四个部分

    rHL=tmp(1:rt/2,ct/2+1:ct);

    rLH=tmp(rt/2+1:rt,1:ct/2);

    rHH=tmp(rt/2+1:rt,ct/2+1:ct);

    tmp(1:rt,1:ct)=myidwt2(rLL,rHL,rLH,rHH);              % 将重构结果返回到矩阵 tmp

    xr(1:rt1,1:ct1)=tmp;       % 把矩阵 tmp 的数据返回到矩阵 xr 的相应区域,准备下一个外层的重构

end

y=xr;                    % 重构结束后得到的矩阵xr即为输出矩阵 y

yu=uint8(xr);            % 将矩阵xr的数据格式转换为适合显示图像的uint8格式

subplot(122);imshow(yu);title('小波重构图像');