正交匹配追踪(Orthogonal Matching Pursuit, OMP)的MATLAB实现

压缩感知(Compressed Sensing, CS)是一种利用稀疏信号的先验知识,用远少于奈奎斯特采样定理要求的样本数目恢复整个信号的技术。正交匹配追踪(Orthogonal Matching Pursuit, OMP)是一种常见的贪婪算法(Greedy algorithm),用于解决压缩感知中的信号重构问题。OMP算法试图找到一组稀疏基,这些基与测量值之间有最大的相关性,并且用于迭代地重构原始信号。

OMP算法

下面是OMP算法的简要步骤:

  1. 初始化残差 ( r_0 = y ),其中 ( y ) 是测量向量,稀疏性基矩阵 ( \Phi ),观测矩阵 ( \Psi ),支撑集 ( \Lambda = \emptyset )(选择的基函数的索引集),和迭代计数器 ( k = 0 )。

  2. 找到与当前残差最相关的列向量(原子) ( \phi_i )
    ( i = \arg\max_{j} | \langle r_k, \phi_j \rangle | )。

  3. 将选中的索引 ( i ) 加到支撑集 ( \Lambda ) 中 ( \Lambda = \Lambda \cup {i} )。

  4. 用最小二乘法从支撑集( \Lambda )上的列构建信号的近似解,即解线性方程 ( \Psi_{\Lambda} x’ = y ),得到( x’{\Lambda} ),在( \Lambda )上的系数,其中 ( \Psi{\Lambda} ) 表示 ( \Psi ) 的列仅包含 ( \Lambda ) 中索引对应的列。

  5. 更新残差 ( r_{k+1} = y - \Psi_{\Lambda} x’ )。

  6. 检查结束条件(例如,残差足够小,( ||r_{k+1}||_2 < \epsilon ) 或已达到预定的迭代次数)。如果未达到结束条件,( k = k + 1 ) 并返回步骤 2。

  7. 输出重建信号,将 ( x’ ) 在非 ( \Lambda ) 的位置上填充零。

MATLAB代码

以下是用MATLAB实现上述过程的代码示例:

% 定义参数
N = 128;       % 信号长度
M = 32;        % 测量数量
K = 10;        % 稀疏度(信号中非零值数量)% 生成一个 K-稀疏信号(随机位置上有非零值)
x = zeros(N, 1);
q = randperm(N);
x(q(1:K)) = randn(K, 1);% 创建一个随机高斯测量矩阵 Phi
Phi = randn(M, N) / sqrt(M);% 生成测量值 y
y = Phi * x;% 调用 OMP 算法
x_hat = OMP(y, Phi, eye(N), K);% 绘制原始信号和恢复信号
figure;
subplot(2, 1, 1);
stem(x, 'b');
title('原始稀疏信号');
subplot(2, 1, 2);
stem(x_hat, 'r');
title('OMP恢复信号');% OMP 函数
function x_hat = OMP(y, Phi, Psi, K)% y - 测量向量% Phi - 传感矩阵% Psi - 稀疏基矩阵(在这里是单位矩阵)% K - 稀疏度或迭代次数% 初始化r = y;                         % 初始残差(即测量值)index_set = [];                % 支撑集合x_hat = zeros(size(Psi, 2), 1); % 估计信号初始化for k = 1:K% 计算相关性correlations = abs(Phi'*r);% 选择具有最大相关性的索引[~, idx] = max(correlations);index_set = union(index_set, idx);% 使用当前支撑集合进行最小二乘求解x_temp = zeros(size(Psi, 2), 1);x_temp(index_set) = pinv(Phi(:, index_set)) * y;% 更新残差r = y - Phi(:, index_set) * x_temp(index_set);% 检查停止准则,可以是基于残差的if norm(r) < 1e-6breakendendx_hat(index_set) = x_temp(index_set);
end

输出结果

输出结果如下,上面是原始信号,下面是恢复后的信号。

在这里插入图片描述

相关博文

理解并实现OpenCV中的图像平滑技术

OpenCV中的边缘检测技术及实现

OpenCV识别人脸案例实战

入门OpenCV:图像阈值处理

我的图书

下面两本书欢迎大家参考学习。

OpenCV轻松入门

李立宗,OpenCV轻松入门,电子工业出版社,2023
本书基于面向 Python 的 OpenCV(OpenCV for Python),介绍了图像处理的方方面面。本书以 OpenCV 官方文档的知识脉络为主线,并对细节进行补充和说明。书中不仅介绍了 OpenCV 函数的使用方法,还介绍了函数实现的算法原理。

在介绍 OpenCV 函数的使用方法时,提供了大量的程序示例,并以循序渐进的方式展开。首先,直观地展示函数在易于观察的小数组上的使用方法、处理过程、运行结果,方便读者更深入地理解函数的原理、使用方法、运行机制、处理结果。在此基础上,进一步介绍如何更好地使用函数处理图像。在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的实例来说明问题,避免使用过多复杂抽象的公式。

本书适合计算机视觉领域的初学者阅读,包括在校学生、教师、专业技术人员、图像处理爱好者。
本书第1版出版后,深受广大读者朋友的喜爱,被很多高校选为教材,目前已经累计重印9次。为了更好地方便大家学习,对本书进行了修订。
在这里插入图片描述

计算机视觉40例

李立宗,计算机视觉40例,电子工业出版社,2022
近年来,我深耕计算机视觉领域的课程研发工作,在该领域尤其是OpenCV-Python方面积累了一点儿经验。因此,我经常会收到该领域相关知识点的咨询,内容涵盖图像处理的基础知识、OpenCV工具的使用、深度学习的具体应用等多个方面。为了更好地把所积累的知识以图文的形式分享给大家,我将该领域内的知识点进行了系统的整理,编写了本书。希望本书的内容能够对大家在计算机视觉方向的学习有所帮助。
本书以OpenCV-Python(the Python API for OpenCV)为工具,以案例为载体,系统介绍了计算机视觉从入门到深度学习的相关知识点。
本书从计算机视觉基础、经典案例、机器学习、深度学习、人脸识别应用等五个方面对计算机视觉的相关知识点做了全面、系统、深入的介绍。书中共介绍了40余个经典的计算机视觉案例,其中既有字符识别、信息加密、指纹识别、车牌识别、次品检测等计算机视觉的经典案例,也包含图像分类、目标检测、语义分割、实例分割、风格迁移、姿势识别等基于深度学习的计算机视觉案例,还包括表情识别、驾驶员疲劳监测、易容术、识别年龄和性别等针对人脸的应用案例。
在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用复杂抽象的公式来介绍。
本书适合计算机视觉领域的初学者阅读,适于在校学生、教师、专业技术人员、图像处理爱好者使用。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2805019.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

自动化行业文件数据\资料防泄密软件——天锐绿盾|@德人合科技

天锐绿盾是一款自动化行业文件数据防泄密软件&#xff0c;由德人合科技提供。该软件采用动态加解密技术&#xff0c;能够有效防止公司内部数据泄密&#xff0c;同时支持各种文件格式加密&#xff0c;如CAD、OFFICE、PDF、图纸等。 PC端&#xff1a;https://isite.baidu.com/sit…

spring boot3登录开发-3(账密登录逻辑实现)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 内容简介 用户登录逻辑实现 创建交互对象 1.创建用户登录DTO 2.创建用户登录VO 创建自定义登录业务异…

Python算法题集_图论(课程表)

Python算法题集_课程表 题207&#xff1a;课程表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【循环递归全算】2) 改进版一【循环递归缓存】3) 改进版二【循环递归缓存反向计算】4) 改进版三【迭代剥离计数器检测】 4. 最优算法5. 相关资源 本…

基于Redis+IDEA+Mysql+Springboot+Vue开发的仓鼠外卖

基于RedisIDEAMysqlSpringbootVue开发的仓鼠外卖 项目介绍&#x1f481;&#x1f3fb; 前端Vue Axios npm install axios Vant2 npm i vantlatest-v2 -S 项目使用移动端页面展示 Element npm i element-ui -S 使用该技术来上传文件 用户功能 用户登录 用户注册(头像上传;手机,邮…

利用Socket.io实现实时通讯功能

在当今快节奏的社交和工作环境中&#xff0c;实时通讯已经变得至关重要。无论是在线游戏的即时交流&#xff0c;还是团队协作中的实时消息传递&#xff0c;都需要强大的实时通讯功能来支持。而在前端开发中&#xff0c;利用Socket.io这一强大的工具库&#xff0c;实现实时通讯功…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的动物识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本博客文章深入解析了基于深度学习的动物识别系统的完整代码&#xff0c;并展示了采用领先的YOLOv8算法的实现代码。该系统与YOLOv7、YOLOv6、YOLOv5等早期版本的性能进行了比较&#xff0c;可以从静态图像到实时视频流的各种媒介中识别动物的高效性和准确性。…

老杨说运维 | 运维大数据价值探索

文末附有视频 伴随第六届双态IT乌镇用户大会的圆满完成&#xff0c;擎创科技“一体化数智管理和大模型应用”主题研讨会也正式落下了帷幕。 云原生转型正成为很多行业未来发展战略&#xff0c;伴随国家对信创数字化要求的深入推进&#xff0c;面对敏稳共存这一近年出现的新难…

psp游戏存档收集SAVEDATA

不想从头开始 ppsspp存档目录 pc&#xff1a;ppsspp解压目录\memstick\PSP\SAVEDATA 安卓&#xff1a;根目录\PSP\SAVEDATA 噬神者2(日版) NPJH50832099c645531020001000 風燐-https://wwl.lanzouq.com/iI1R01owozxa 咲夜-https://wwl.lanzouq.com/id1tX1owp2uf につてのぬ…

袁庭新ES系列10节 | 使⽤kibana对⽂档操作

前言 在前面的小节中&#xff0c;我们已经给大家介绍了Elasticsearch中文档的相关概念&#xff0c;想必有些同学都已经忘记了&#xff0c;那我们一块儿再来回顾下&#xff0c;文档即索引库中某个类型下的数据&#xff0c;会根据规则创建索引&#xff0c;将来用来搜索。可以类比…

宝塔面板安装了mysql5.7和phpMyadmin,但是访问phpMyadmin时提示502 Bad Gateway

操作流程截图如下&#xff1a; 原因是没有选择php版本 选择php版本 下一页找到phpMyAdmin&#xff0c;选择设置 目前只有纯净态&#xff0c;说明没有php环境&#xff0c;前去安装php环境 点击安装&#xff0c;选择版本&#xff0c;这里选择的是7.4版本&#xff0c;编译安…

Set集合(Java) 及底层原理

SET<E>是一个接口&#xff0c;添加的元素是无序的&#xff1a;添加数据的顺序和获取出的数据顺序不一致&#xff1b;不重复&#xff0c;无索引。 实现类&#xff1a; 1.HashSet&#xff1a;无序不重复无索引 2.LinkedHashSet&#xff1a;有序不重复无索引 3.TreeSet&…

六、回归与聚类算法 - 模型保存与加载

目录 1、API 2、案例 欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、API 2、案例

算法题目中图和树的存储

邻接表的方式存储图和树 这就是邻接表&#xff0c;就是将每个结点的孩子结点用链表表示出来&#xff0c;再将所有结点以数组形式连起来。 存储树和图我们需要三个数组&#xff0c;h[N], e[N], ne[N],分别表示邻接表&#xff0c;结点值&#xff0c;结点的next值&#xff0c;h[i…

python3内置函数range()心得

python3内置函数range()心得 本文环境&#xff1a;Win 7 (64-bit) python 3.7.6 (32 bit) Thonny 3.2.6 概念 range()是python 3的内置函数&#xff08;Built-in Functions&#xff09;&#xff0c;它返回一个 range 对象的整数序列&#xff0c;可以设定这个序列的起点、终…

Google开源工具类库Guava介绍

Guava 是由 Google 开发和维护的一组开源的 Java 库&#xff0c;它提供了许多 Google 内部 Java 项目依赖的核心库。Guava 库包含了大量用于集合、缓存、支持原语操作、并发库、通用注解、字符串处理、I/O 等等的实用工具类和增强功能。使用 Guava 可以帮助开发者写出更加简洁、…

互联设备-中继器-路由器等

网卡的主要作用 1 在发送方 把从计算机系统要发送的数据转换成能在网线上传输的bit 流 。 2 在接收方 把从网线上接收来的 bit 流重组成计算机系统可以 处理的数据 。 3 判断数据是否是发给自己的 4 发送和控制计算机系统和网线数据流 计算机的分类 1、台式机 2、小型机和服…

多维时序 | Matlab实现CPO-BiTCN-BiGRU冠豪猪优化时间卷积神经网络双向门控循环单元多变量时间序列预测模型

多维时序 | Matlab实现CPO-BiTCN-BiGRU冠豪猪优化时间卷积神经网络双向门控循环单元多变量时间序列预测模型 目录 多维时序 | Matlab实现CPO-BiTCN-BiGRU冠豪猪优化时间卷积神经网络双向门控循环单元多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍…

【vue】provide/inject

provide/ inject这对选项需要一起使用&#xff0c;以允许一个祖先组件向其所有子孙后代注入一个依赖&#xff0c;不论组件层次有多深&#xff0c;并在起上下游关系成立的时间里始终生效。 通途点来讲可以用来实现隔代传值&#xff0c;传统的props只能父传子&#xff0c;而 prov…

ThreeJS 几何体顶点position、法向量normal及uv坐标 | UV映射 - 法向量 - 包围盒

文章目录 几何体的顶点position、法向量normal及uv坐标UV映射UV坐标系UV坐标与顶点坐标设置UV坐标案例1&#xff1a;使用PlaneGeometry创建平面缓存几何体案例2&#xff1a;使用BufferGeometry创建平面缓存几何体 法向量 - 顶点法向量光照计算案例1&#xff1a;不设置顶点法向量…

python 3.7.3的安装

参考 Linux安装Python3.7-良许Linux教程网 (lxlinux.net) 1、Index of /ftp/python/3.7.9/ 1、安装gcc&#xff0c;yum -y install gcc 2、 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel…