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

2024-02-24 10:04

本文主要是介绍图像压缩感知的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:widthcolumn_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)/4n=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 == 1Aug_t=T_Mat(:,pos);elseAug_t=[Aug_t,T_Mat(:,pos)];endT_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余个经典的计算机视觉案例,其中既有字符识别、信息加密、指纹识别、车牌识别、次品检测等计算机视觉的经典案例,也包含图像分类、目标检测、语义分割、实例分割、风格迁移、姿势识别等基于深度学习的计算机视觉案例,还包括表情识别、驾驶员疲劳监测、易容术、识别年龄和性别等针对人脸的应用案例。
在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用复杂抽象的公式来介绍。
本书适合计算机视觉领域的初学者阅读,适于在校学生、教师、专业技术人员、图像处理爱好者使用。

在这里插入图片描述

这篇关于图像压缩感知的MATLAB实现(OMP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/741755

相关文章

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库