图像压缩感知的MATLAB实现(OMP)

前面实现了

压缩感知的图像仿真(MATLAB源代码)

效果还不错,缺点是速度慢如牛。
下面我们采用OMP对其进行优化,提升速度。具体代码如下:

仿真

构建了一个MATLAB文件,所有代码都在一个源文件里面:

MATLAB实现


clc
clearvars;

%------------ 读取图像 --------------
img=imread('lenagray.bmp'); % 测试图像
% img=rgb2gray(img); % 如果是彩色图像,将其转换为灰度图
img=imresize(img,[256,256]); % 调整图像大小
% img = imnoise(img, 'gaussian', noi); % 在这里添加噪声到图像中
img=double(img);
[height,width]=size(img);

%------------ 形成测量矩阵和基矩阵 ---------------
Phi=randn(floor(height/3),width);  % 仅保留原始数据的三分之一
Phi = Phi * diag(1./sqrt(sum(Phi.^2, 1))); % 归一化每一列
disp(size(Phi));
mat_dct_1d=dct(eye(256,256));  % 利用内置DCT函数构建DCT基

%--------- 投影 ---------
img_cs_1d=Phi*img; % 将每一列视作独立的信号处理

%-------- 使用OMP恢复 ------------
sparse_rec_1d=zeros(height,width);            
Theta_1d=Phi*mat_dct_1d;
for i=1:width
    column_rec=cs_omp(img_cs_1d(:,i),Theta_1d,height);
    sparse_rec_1d(:,i)=column_rec';           % 稀疏表示
end
img_rec_1d=mat_dct_1d*sparse_rec_1d;          % 反变换恢复图像

%------------ 展示结果 --------------------

figure(1)
subplot(2,2,1),imshow(uint8(img)),title('原始图像')
subplot(2,2,2),imagesc(Phi),title('测量矩阵')
subplot(2,2,3),imagesc(mat_dct_1d),title('一维DCT基矩阵')
psnr = 20*log10(255/sqrt(mean((img(:)-img_rec_1d(:)).^2)))
subplot(2,2,4),imshow(uint8(img_rec_1d)),title(['一维恢复图像 PSNR:',num2str(psnr),'dB'])




function hat_x=cs_omp(y,T_Mat,m)
% 用OMP算法解决 y=T_Mat*x问题,T_Mat是测量矩阵与稀疏表示基的组合
% y - 测量值
% T_Mat - 随机矩阵和稀疏表征基的组合
% m - 原始信号的大小
% 稀疏度是length(y)/4

n=length(y);
s=floor(n/4);
hat_x=zeros(1,m);
Aug_t=[];
r_n=y;

for times=1:s;
    product=abs(T_Mat'*r_n);

    [~,pos]=max(product);
    if times == 1
        Aug_t=T_Mat(:,pos);
    else
        Aug_t=[Aug_t,T_Mat(:,pos)];
    end
    T_Mat(:,pos)=0;
    aug_x=(Aug_t'*Aug_t)\(Aug_t'*y);
    r_n=y-Aug_t*aug_x;
    pos_array(times)=pos;

end
hat_x(pos_array)=aug_x;
end

仿真结果

速度非常快,但是效果稍差,总体还可以。

在这里插入图片描述

参考资料

https://github.com/rasikraj01/CompressiveSensing

压缩感知基础

引言:

近年来,随着数字图像和视频应用的广泛普及,对高清图像和视频的存储和传输需求也日益增长。然而,尺寸庞大的图像和视频数据给存储和传输带来了巨大的挑战。为了解决这一问题,压缩感知(Compressed Sensing,简称CS)应运而生。压缩感知是一种基于采样和重建的新颖信号处理理论,能够用更少的采样数据还原原始信号,使图像和视频的压缩和传输变得更加高效和便捷。本文将介绍压缩感知的原理、应用以及未来发展方向。

压缩感知原理的基础:

  1. 信号稀疏性:压缩感知的原理基于信号在某个合适的域中是稀疏的,即信号可以由少量的非零系数表示。这个基于稀疏性的假设是压缩感知的关键。

  2. 随机测量矩阵:为了采样信号,压缩感知使用随机测量矩阵来获取信号的线性投影。这种投影可以通过稀疏表示的技术进行解码,从而重建原始信号。

  3. 重建算法:压缩感知中常用的重建算法有基于凸编程的优化算法、迭代阈值算法以及基于字典的算法等。这些算法通过信号的稀疏表示,使用较少的测量数据进行信号的恢复。

压缩感知在图像压缩中的应用:

  1. 图像压缩:传统的图像压缩方法使用基于采样定理的方法,需要进行大量的数据采样和重构。而压缩感知则采用随机测量,能够更有效地获取信号信息。因此,压缩感知在图像压缩中应用广泛,能够实现更高效的图像压缩和传输。

  2. 图像恢复:压缩感知不仅可以对稀疏的信号进行压缩,还可以对非稀疏信号进行重建。在图像恢复方面,它能够从极少量的采样数据中恢复出较为清晰的图像,极大地节省了图像采集和传输的成本。

压缩感知在视频压缩中的应用:

  1. 视频压缩:与图像压缩类似,压缩感知对视频压缩也具有显著的优势。传统的视频压缩方法在对每一帧进行采样和压缩时,需要大量的存储和传输带宽。而压缩感知通过对视频的时空采样,能够实现更高效的视频压缩和传输。

  2. 视频恢复:在视频传输中,由于网络带宽的限制或传输中的错误,视频信号可能会受到损坏或丢失。压缩感知技术能够在保证图像质量的同时,通过解码、重建和补偿的方法,实现对视频信号的恢复,提高了视频传输的稳定性和可靠性。

未来展望与应用挑战:

尽管压缩感知已经在图像和视频压缩领域取得了显著的成果,但仍然存在一些挑战需要克服。其中包括对不同场景和应用领域的适应性、对信号重构误差的控制、算法的实时性等问题。未来的研究方向包括进一步优化压缩感知算法、探索多模态数据的压缩感知方法以及与人工智能、机器学习等领域的结合,推动压缩感知的应用更加深入。

结论:

压缩感知作为一种新兴的信号处理理论和技术,为图像和视频的压缩和传输提供了一种全新的思路和方法。其基于信号稀疏性和随机测量矩阵的原理,使得压缩感知能够用更少的采样数据还原原始信号。在图像和视频压缩领域,压缩感知已经展现出了巨大的潜力和广阔的应用前景。然而,还需要进一步的研究和努力,以克服现有的挑战,推动压缩感知的不断发展和创新。

相关博文

理解并实现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://www.mfbz.cn/a/407031.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系统保护规则(Sentinel)

系统保护规则 CPU使用率 设置 为了方便产生现象, 设置了使用率朝贡国10% 就触发保护 效果 入口QPS 设置 针对 所有接口的平均 QPS 阈值 效果 访问次数很多的情况下,即可出现

英文输入法(C 语言)

题目 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。 注意 英…

【鸿蒙开发】第十四章 Stage模型应用组件-任务Mission

1 任务(Mission)管理场景 任务(Mission)管理相关的基本概念如下: AbilityRecord:系统服务侧管理一个UIAbility实例的最小单元,对应一个应用侧的UIAbility组件实例。系统服务侧管理UIAbility实例数量上限为512个。 Mi…

Python实战: 获取 后缀名(扩展名) 或 文件名

Python实战: 获取 后缀名(扩展名) 或 文件名 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得到您的订阅和支持~ &…

【大厂AI课学习笔记NO.52】2.3深度学习开发任务实例(5)需求采集考虑维度

今天来学习,怎么做需求分析,如何明确数据采集需求。 我把自己考试通过的学习笔记,都分享到这里了,另外还有一个比较全的思维脑图,我导出为JPG文件了。下载地址在这里:https://download.csdn.net/download/g…

《Linux C编程实战》笔记:信号量

信号量在操作系统的书里一般都有介绍,这里就只写书上说的了。 信号量是一个计数器,常用于处理进程或线程的同步问题,特别是对临界资源访问的同步。临界资源可以简单地理解为在某一时刻只能由一个进程或线程进行操作的资源,这里的…

FairyGUI × Cocos Creator 3.x 使用方式

前言 上一篇文章 FariyGUI Cocos Creator 入门 简单介绍了FairyGUI,并且按照官方demo成功在Cocos Creator2.4.0上运行起来了。 当我今天使用Creator 3.x 再引入2.x的Lib时,发现出现了报错。 这篇文章将介绍如何在Creator 3.x上使用fgui。 引入 首先&…

EarMaster Pro 7 简体中文破解版下载 v7.2.0.42 电脑版

软件介绍 EarMaster Pro 简体中文破解版是一款由丹麦皇家音乐学院官方制作的多功能音乐品鉴教育软件,软件具有丰富的功能,它可以自定义培训课程,针对性地训练音准、节奏、和声等音乐要素,用户可以根据自身需求和水平选择不同难度…

Minimize Inversions

先来看看官方题解的做法,他一反常态的没有在逆序对题目里面考虑每个位置的贡献,而是直接回到定义考虑每对数是否是逆序对 我们考虑原数列中任意的一组数\((a_i,a_j)\)和\((b_i,b_j)\)。如果最开始两个都不是逆序对,那么交换之后两个都是逆序对…

RabbitMQ的死信队列和延迟队列

文章目录 死信队列如何配置死信队列死信队列的应用场景Spring Boot实现RabbitMQ的死信队列 延迟队列方案优劣:延迟队列的实现有两种方式: 死信队列 1)“死信”是RabbitMQ中的一种消息机制。 2)消息变成死信,可能是由于…

VBA语言専攻资料周末新增

各位T3学员∶本周VBA技术资料增加5讲到385讲,看到通知后联络我免费领取资料。成果来之不易,您更新后请说声谢谢,感恩我的成果。MF381:使工作表使用区域适合窗口MF382:引用复制后的工作表MF383:处理Excel中存…

外星文明会是朋友还是敌人?科学家用AI模拟揭示惊人答案!

引言:人类与外星文明的潜在互动 自古以来,人类就对外太空充满了好奇与向往,无数科幻作品中都描绘了人类与外星文明的潜在互动。然而,这些互动并非总是和平友好的,正如物理学家Stephen Hawking所警告的,盲目…

Linux安装jdktomcatMySQl一战完成

一、jdk安装具体步骤 1、查询是否有jdk java -version 2、进入opt目录 cd /opt/ 连接服务器工具 进入opt目录,把压缩文件上传 查询是否查询成功 进入解压到的目录 cd /usr/local/创建新文件夹 mkdir java 再回到opt目录进行解压 cd /opt 解压到刚刚创建的文…

如何使用 NFTScan NFT API 在 Mantle 网络上开发 Web3 应用

Mantle Network 是建立在以太坊区块链之上的第 2 层扩展解决方案,采用了 Optimistic Rollups 技术,由 BitDAO 孵化,以提供比以太坊更快速和更经济的交易体验。由于 Mantle 基础链构建在 OP Stack 之上并与 EVM 兼容,因此以太坊网络…

LeetCode 102. 二叉树的层序遍历

题目链接https://leetcode.cn/problems/binary-tree-level-order-traversal/description/ 通过队列实现层序遍历 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res new ArrayList<>();Queue<…

读书笔记之《巨富》:如何成为全球顶级富豪?

《巨富—全球超级新贵的崛起和其他人的没落》的作者是[美]克里斯蒂娅•弗里兰&#xff0c; 原作名: Plutocrats: The Rise of the New Global Super-Rich and the Fall of Everyone Else &#xff0c;2013年出版。 克里斯蒂娅•弗里兰&#xff08;Chrystia Freeland&#xff…

Linux使用C语言获取进程信息

Linux使用C语言获取进程信息 Author: OnceDay Date: 2024年2月22日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档: Linux proc目录详解_/proc/mounts-CSDN博客Linux下/proc目录介绍 - 知乎 (zhihu.com)Linux内…

Android 如何添加自定义字体

Android 如何添加自定义字体 比如我要添加 jetbrains 相关字体 在 res 文件夹中添加 font 文件夹。里面放入你的字体文件 .ttf .otf&#xff0c;字体文件名需要是小写&#xff0c;只能是字母和下划线。 在 xml 布局文件中直接通过 android:fontFamily"font/jetbrainsmo…

Python实战:xlsx文件的读写

Python实战&#xff1a;xlsx文件的读写 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的订阅和支持~ &#…

基于java Springboot实现教务管理系统

基于java Springboot实现教务管理系统《视频版-建议收藏》 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…
最新文章