Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab-Haar小波_Matlab_Haar Wavelet - Fatal编程技术网

Matlab-Haar小波

Matlab-Haar小波,matlab,haar-wavelet,Matlab,Haar Wavelet,我的任务 1.我有一个haar过滤器,如[1][1] 2.我有一个像 --[a][b][c][d] --[e][f][g][h] 3.我想对图像进行小波变换,结果如下: --第1步: --[平均值(a,b)][平均值(c,d)][a-b][c-d] --[平均值(e,f)][平均值(g,h)][e-f][g-h] --重命名:--仅用于清晰的演示文稿 --[a'][b'][c'][d'] --[e'][f'][g'][h'] --第二步: --[平均(a',b')][a'-b'][c'][d']

我的任务

1.我有一个haar过滤器,如[1][1]
2.我有一个像
--[a][b][c][d]
--[e][f][g][h]
3.我想对图像进行小波变换,结果如下:
--第1步:
--[平均值(a,b)][平均值(c,d)][a-b][c-d]
--[平均值(e,f)][平均值(g,h)][e-f][g-h]
--重命名:--仅用于清晰的演示文稿
--[a'][b'][c'][d']
--[e'][f'][g'][h']
--第二步:
--[平均(a',b')][a'-b'][c'][d']
--[平均值(e',f'][e'-f'][g'][h']
4.步骤2的结果就是我想要的。

问题
我发现Matlab中有一个关于小波应用的工具箱。
我使用了这个命令[cA,cH,cV,cD]=dwt2(I,'haar');输出cV很接近,但不是我想要的。
因此,我想问,如何在Matlab中以一种简单的方式执行任务,这意味着我可以使用一些内置工具来执行此任务。

我的路

function haar_wavelet(input_im)
I = imread(input_im);
I = rgb2gray(I);
I = imresize(I,[512 512]);
[I_row,I_col]=size(I);

if(mod(I_col,2))
    I_col=I_col-1;
end

haar_mask = make_haar(I_row,I_col);

I=double(I);

new_M = I(:,1:I_col);

j=2;
i=I_col;
while(I_col/j ~= 2)
    i = [i I_col/j];
    j = j*2;
end

for k = i
    new_M(:,1:k) = my_haar_trans(new_M(:,1:k),haar_mask(:,1:k));
end
figure
imshow(new_M)


end


function [output_haar] = make_haar(row,col)
    output_haar=ones(row,col)*2;
    for i = 2:2:col
        output_haar(:,i)=output_haar(:,i)*0;
    end
    output_haar=output_haar-1;
end

function [output_M] = my_haar_trans(target_M,mask)
    temp_diff=target_M.*mask;
    [diff_row,diff_col]=size(temp_diff);

    diff_M=zeros(diff_row,diff_col/2);
    for i = 1:diff_col/2
        diff_M(:,i)=temp_diff(:,2*i-1)+temp_diff(:,2*i);
    end

    mean_M=zeros(diff_row,diff_col/2);
    for i = 1:diff_col/2
        mean_M(:,i)=target_M(:,2*i-1)+target_M(:,2*i);
    end

    output_M=[mean_M diff_M];
end

这就是我正在做的,有没有更简单的方法?

正如您所说,有一个内置的matlab代码来执行一维和二维小波变换。例如,在二维Haar小波的情况下,它是[cA,cH,cV,cD]=dwt2(I,'db1')。这正是您想要的。您也可以基于小波分解方块图编写自己的函数。请注意,对于小尺寸的向量,输出必须相同,但对于像图像这样的大尺寸向量,可能会有一些残差