压缩感知——沃尔什-哈达玛(WHT)变换与逆变换的Matlab代码实现

沃尔什-哈达玛变换(Walsh-Hadmard Transform,WHT),是一种典型的非正弦函数变换,采用正交直角函数作为基函数,具有与傅里叶函数类似的性质,图像数据越是均匀分布,经过沃尔什-哈达玛变换后的数据越是集中于矩阵的边角上,因此沃尔什变换具有能量集中的性质,可以用于压缩图像信息。

Matlab中的Hadamard函数:

格式:H=hadamard( n ) ,返回一个 n * n的hadamard矩阵。
















下面对lena图像进行沃尔什-哈达玛变换与逆变换的Matlab实现:

clc;
clear all;
im_l=imread('C:\Users\DELL\Desktop\lena.jpg');
im_l1=im2double(im_l);
im_l2=rgb2gray(im_l1);

%对图像进行哈达玛变换
H=hadamard(512);%产生512X512的Hadamard矩阵
haImg=H*im_l2*H;
haImg2=haImg/512;

%对图像进行哈达玛逆变换
hhaImg=H'*haImg2*H';
hhaImg2=hhaImg/512;

haImg1=im2uint8(haImg);
hhaImg1=im2uint8(hhaImg2);

subplot(2,2,1);
imshow(im_l);
title('原图');

subplot(2,2,2);
imshow(im_l2);
title('灰度图');

subplot(2,2,3);
imshow(haImg2);
title('图像的二维离散Hadamard变换');

subplot(2,2,4);
imshow(hhaImg1);
title('图像的二维离散Hadamard逆变换');







  • 15
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
沃尔什-哈达变换(Walsh-Hadamard Transform,WHT)是一种线性变换,用于在信号处理和数字图像处理领域中进行频谱分析、数据压缩和编码等操作。它是基于哈达矩阵的一种变换方法。 沃尔什-哈达变换可以对长度为2的幂的序列进行变换变换后的结果为相同长度的序列。它的核心思想是通过对输入序列中的每对元素进行加法和减法操作,得到变换后的序列。变换的过程可以递归地进行,将序列划分为越来越小的子序列。 下面是沃尔什-哈达变换的基本步骤: 1. 初始化:将长度为N的输入序列表示为一个N维向量。 2. 若N = 1,则变换结束,输出结果即为输入序列。 3. 否则,将输入序列划分为两个长度为N/2的子序列。 4. 对每个子序列应用沃尔什-哈达变换。 5. 将两个子序列的变换结果按照一定规则组合,得到长度为N的变换结果。 具体来说,在第4步中,对每个子序列应用沃尔什-哈达变换的方法是将其分成两部分,分别进行加法和减法操作,并将结果按原序列的顺序排列。例如,对于长度为8的输入序列[1, 0, 1, 0, 0, 1, 0, 1],可以按照如下方式进行变换: ``` [1, 0, 1, 0, 0, 1, 0, 1] -> [1, 1, 0, 0] + [1, -1, 0, 0] -> [2, 0, 0, 0] ``` 最终得到变换后的结果为[2, 0, 0, 0]。 沃尔什-哈达变换具有快速计算的性质,并且在数据压缩、图像编码和傅里叶变换等方面有广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值