离散型哈尔小波变换简单实现

这篇博客介绍了如何在Matlab中实现一维和二维的离散哈尔小波变换。一维离散哈尔小波变换通过特定的变换矩阵将数据分解为高频和低频成分,代码简洁明了。二维离散哈尔小波变换则对图像进行多级变换,展示了一阶和二阶变换效果。通过示例代码和调用,读者可以理解并应用这些变换方法。
摘要由CSDN通过智能技术生成


二阶哈尔变换矩阵如下
[ 1 2 1 2 1 2 − 1 2 ] \begin{bmatrix} \frac{1}{\sqrt 2}& \frac{1}{\sqrt 2} \\ \frac{1}{\sqrt 2} & -\frac{1}{\sqrt 2} \\ \end{bmatrix} [2 12 12 12 1]
经过小波变换后,可以把数据划分为不同的成分:高频成分,低频成分。
多阶小波变换,对于低频成分可以进行划分。

一维离散型哈尔小波变换

实现代码

function [ A,D ] = haarLinearTranslation(data)
	ha=[0.7071,0.7071; 0.7071,-0.7071];
	[~,n]= size(data);
	data = reshape(data,2,n/2);
	data = ha*data;
	A = data(1,:);
	D = data(2,:);
end

调用

load noisdopp
[A,D]=haarLinearTranslation(noisdopp);
subplot(3,1,1)
plot(noisdopp)  	%原图
subplot(3,1,2)
plot(A)				%近似和
subplot(3,1,3)
plot(D)				%细节和

在这里插入图片描述

二维离散型哈尔小波变换

实现代码

function [ output ] = haarTranslation(img,k)
	%对img图像做k阶哈尔小波变换
	ha=[0.7071    0.7071; 0.7071   -0.7071];
	size_img = 2^int32(log2(min(size(img))));
	img = double(imresize(img,[size_img,size_img]));
	output = translation(img,k,size_img,ha);
end

function out = translation(img,k,size,ha)
    for i=1:2:size;
        for j=1:2:size;
            img(i:i+1,j:j+1)= ha*img(i:i+1,j:j+1)*ha';
        end
    end
    size_half = size/2;
    data = reshape(img,2,size_half,size);
    u = reshape(data(1,:,:),size_half,size);
    v = reshape(data(2,:,:),size_half,size);
    u = reshape(u',2,size_half,size_half);
    v = reshape(v',2,size_half,size_half);
    out =[reshape(u(1,:,:),size_half,size_half),reshape(u(2,:,:),size_half,size_half);reshape(v(1,:,:),size_half,size_half),reshape(v(2,:,:),size_half,size_half);];
    if k>1
       out(1:size_half,1:size_half) = translation(out(1:size_half,1:size_half),k-1,size_half,ha);
    end
end

调用

img = rgb2gray(imread('img.png'));
subplot(1,3,1)
imshow(img);	%原图
subplot(1,3,2)
imshow(uint8(haarTranslation(img,1)));	%一阶哈尔小波变换
subplot(1,3,3)
imshow(uint8(haarTranslation(img,2)));	%二阶哈尔小波变换

在这里插入图片描述
上面看不清,再补一张图
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值