当前位置: 首页 > news >正文

图像的压缩感知的MATLAB实现(第3种方案)

前面介绍了两种不同的压缩感知实现:
图像压缩感知的MATLAB实现(OMP)
压缩感知的图像仿真(MATLAB源代码)

上述两种方法还存在着“速度慢、精度低”等不足。
本篇介绍一种新的方法。

压缩感知(Compressed Sensing)是一种信号处理技术,旨在通过取样和重构过程中的稀疏性或低维性的先验知识,从少量的测量数据中恢复原始信号。与传统的信号采样方式相比,压缩感知可以以更低的采样率获取信号,并在一定程度上保持较高的重构质量。

以下是压缩感知的一些重要知识点:

  1. 稀疏性:压缩感知假设信号在某个表示域下是稀疏的,即信号能够用较少的非零系数表示。这意味着信号的大部分能量集中在少数几个基函数上,而其他系数很接近于零。

  2. 测量矩阵:压缩感知使用一个测量矩阵来计算信号的投影测量。测量矩阵可以是随机矩阵或基于不同的测量方法生成的。测量矩阵的选择对于压缩感知的性能具有重要影响。

  3. 重构算法:压缩感知利用稀疏表示的先验知识,通过最小化正则化函数来恢复原始信号。常用的重构算法包括基于L1范数的贪婪迭代算法(如OMP、CoSaMP)、基于迭代阈值的算法(如IST、FISTA)和基于凸优化的算法(如基于内点法的L1优化)。

  4. 重构性能:压缩感知的重构性能用于衡量在给定的测量数量下,重构的信号与原始信号之间的误差。重构性能受到信号的稀疏度、测量矩阵的设计和重构算法的选择等因素的影响。

MATLAB和其他数学软件提供了用于压缩感知的工具箱和函数,如 l1magicSPGL1。这些函数可以用于生成测量矩阵、实现重构算法,并进行压缩感知的仿真和实验。

压缩感知在图像处理、语音信号处理、雷达成像、医学成像等领域都得到了广泛的应用。它提供了一种新的思路和方法,可以在低采样率下实现高质量的信号重构,并对传统信号采样理论进行了一定的突破。

MATLAB实现

针对网络上沙威老师的代码中所使用小波变换进行了修改。
将其中自定义的dwt函数修改了了使用MATLAB自带的dwt2函数。

MATLAB代码

MATLAB代码实现如下:


clc;clear%  读文件
X=imread('lenagray.bmp');
X=double(X);
[a,b]=size(X);% %  小波变换矩阵生成
% ww=DWT(a);
% % ww=a;
% %
% % %  小波变换让图像稀疏化(注意该步骤会耗费时间,但是会增大稀疏度)
% X1=ww*sparse(X)*ww';
% % % X1=X;
% X1=full(X1);
%
% X1=X;[LL1, LH1, HL1, HH1] = dwt2(X, 'haar');
[LL2, LH2, HL2, HH2] = dwt2(LL1, 'haar');
[LL3, LH3, HL3, HH3] = dwt2(LL2, 'haar');
[LL4, LH4, HL4, HH4] = dwt2(LL3, 'haar');LL3 = [LL4, LH4; HL4, HH4];
LL2=[LL3, LH3; HL3, HH3];
LL1=[LL2, LH2; HL2, HH2];
X1=[LL1, LH1; HL1, HH1];%  随机矩阵生成
M=190;
R=randn(M,a);
% R=mapminmax(R,0,255);
% R=round(R);%  测量值
Y=R*X1;%  OMP算法
%  恢复矩阵
X2=zeros(a,b);
%  按列循环
for i=1:b%  通过OMP,返回每一列信号对应的恢复值(小波域)rec=omp(Y(:,i),R,a);%  恢复值矩阵,用于反变换X2(:,i)=rec;
end%  原始图像
figure(1);
imshow(uint8(X));
title('原始图像');%  变换图像
figure(2);
imshow(uint8(X1));
title('小波变换后的图像');%  压缩传感恢复的图像
figure(3);
%  小波反变换
% X3=ww'*sparse(X2)*ww;
% X3=X2;
% X3=full(X3);
% X3=idwt2(X2);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 执行逆小波变换
[LL1, LH1, HL1, HH1] = partitionMatrix(X2);
[LL2, LH2, HL2, HH2] = partitionMatrix(LL1);
[LL3, LH3, HL3, HH3] = partitionMatrix(LL2);
[LL4, LH4, HL4, HH4] = partitionMatrix(LL3);% 第四级逆变换
LL3 = idwt2(LL4, LH4, HL4, HH4, 'haar');% 第三级逆变换
LL2= idwt2(LL3, LH3, HL3, HH3, 'haar');% 第二级逆变换
LL1 = idwt2(LL2, LH2, HL2, HH2, 'haar');% 第一级逆变换,得到原始图像
X3 = idwt2(LL1, LH1, HL1, HH1, 'haar');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%imshow(uint8(X3));
title('恢复的图像');%  误差(PSNR)
%  MSE误差
errorx=sum(sum(abs(X3-X).^2));
%  PSNR
psnr=10*log10(255*255/(errorx/a/b))%  OMP的函数
%  s-测量;T-观测矩阵;N-向量大小
function hat_y=omp(s,T,N)
Size=size(T);                                     %  观测矩阵大小
M=Size(1);                                        %  测量
hat_y=zeros(1,N);                                 %  待重构的谱域(变换域)向量
Aug_t=[];                                         %  增量矩阵(初始值为空矩阵)
r_n=s;                                            %  残差值for times=1:M;                                  %  迭代次数(稀疏度是测量的1/4)for col=1:N;                                  %  恢复矩阵的所有列向量product(col)=abs(T(:,col)'*r_n);          %  恢复矩阵的列向量和残差的投影系数(内积值)end[val,pos]=max(product);                       %  最大投影系数对应的位置Aug_t=[Aug_t,T(:,pos)];                       %  矩阵扩充T(:,pos)=zeros(M,1);                          %  选中的列置零(实质上应该去掉,为了简单我把它置零)aug_y=(Aug_t'*Aug_t)^(-1)*Aug_t'*s;           %  最小二乘,使残差最小r_n=s-Aug_t*aug_y;                            %  残差pos_array(times)=pos;                         %  纪录最大投影系数的位置if (norm(r_n)<0.9)                            %  残差足够小break;end
end
hat_y(pos_array)=aug_y;                           %  重构的向量endfunction [X1, X2, X3, X4] = partitionMatrix(X)
% 获取矩阵X的大小
[m, n] = size(X);% 将矩阵X划分为四等份
X1 = X(1:m/2, 1:n/2); % 左上角子矩阵
X2 = X(1:m/2, n/2+1:end); % 右上角子矩阵
X3 = X(m/2+1:end, 1:n/2); % 左下角子矩阵
X4 = X(m/2+1:end, n/2+1:end); % 右下角子矩阵
end

输出结果

输出结果如下,效果一般,而且速度较慢。

在这里插入图片描述

参考知识点

MATLAB小波变换函数

小波变换是一种信号处理技术,通过在时间-频率域中使用基于小波的函数进行信号分析。小波变换在处理非平稳信号和图像时特别有用,可以将信号分解为不同频率的成分。它在数据压缩、去噪、特征提取等领域有广泛应用。

MATLAB中提供了用于二维离散小波变换的函数 dwt2,可以将图像进行小波分解。该函数执行的是多级离散小波变换,将图像分解为多个尺度的近似系数和细节系数。具体来说,dwt2函数的语法如下:

[C, S] = dwt2(X, wavelet)

其中,

  • X 是输入的二维图像;
  • wavelet 是指定的小波基函数,比如 'haar''db1' 等;
  • C 是包含小波变换系数的矩阵;
  • S 是描述小波变换结果各层的结构体。

你可以通过调用dwt2函数来执行二维离散小波变换,得到图像的小波分解系数和结构信息。然后,你可以进一步对获得的系数进行处理,比如重构原始图像、进行图像压缩、图像增强等。

需要注意的是,小波变换是一种复杂的信号处理技术,需要一定的理论基础和实践经验来使用和理解。

自定义函数

网络上沙威老师的dwt版本如下:

function ww=DWT(N)
[h,g]=wfilters('haar','d');      %  分解低通和高通滤波器
% N=256;                           %  矩阵维数(大小为2的整数幂次)
L=length(h);                       %  滤波器长度
rank_max=log2(N);                  %  最大层数
rank_min=double(int8(log2(L)))+1+3;  %  最小层数
ww=1;   %  预处理矩阵
%  矩阵构造
for jj=rank_min:rank_maxnn=2^jj;%  构造向量p1_0=sparse([h,zeros(1,nn-L)]);p2_0=sparse([g,zeros(1,nn-L)]);%  向量圆周移位for ii=1:nn/2p1(ii,:)=circshift(p1_0',2*(ii-1))';p2(ii,:)=circshift(p2_0',2*(ii-1))';end%  构造正交矩阵w1=[p1;p2];mm=2^rank_max-length(w1);w=sparse([w1,zeros(length(w1),mm);zeros(mm,length(w1)),eye(mm,mm)]);ww=ww*w;clear p1;clear p2;
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余个经典的计算机视觉案例,其中既有字符识别、信息加密、指纹识别、车牌识别、次品检测等计算机视觉的经典案例,也包含图像分类、目标检测、语义分割、实例分割、风格迁移、姿势识别等基于深度学习的计算机视觉案例,还包括表情识别、驾驶员疲劳监测、易容术、识别年龄和性别等针对人脸的应用案例。
在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用复杂抽象的公式来介绍。
本书适合计算机视觉领域的初学者阅读,适于在校学生、教师、专业技术人员、图像处理爱好者使用。

在这里插入图片描述

相关文章:

图像的压缩感知的MATLAB实现(第3种方案)

前面介绍了两种不同的压缩感知实现&#xff1a; 图像压缩感知的MATLAB实现&#xff08;OMP&#xff09; 压缩感知的图像仿真&#xff08;MATLAB源代码&#xff09; 上述两种方法还存在着“速度慢、精度低”等不足。 本篇介绍一种新的方法。 压缩感知&#xff08;Compressed S…...

高温应用中GaN HEMT大信号建模的ASM-HEMT

来源&#xff1a;An ASM-HEMT for Large-Signal Modeling of GaN HEMTs in High-Temperature Applications&#xff08;JEDS 23年&#xff09; 摘要 本文报道了一种用于模拟高温环境下氮化镓高电子迁移率晶体管&#xff08;GaN HEMT&#xff09;的温度依赖性ASM-HEMT模型。我…...

文件上传---->生僻字解析漏洞

现在的现实生活中&#xff0c;存在文件上传的点&#xff0c;基本上都是白名单判断&#xff08;很少黑名单了&#xff09; 对于白名单&#xff0c;我们有截断&#xff0c;图片马&#xff0c;二次渲染&#xff0c;服务器解析漏洞这些&#xff0c;于是今天我就来补充一种在upload…...

Ubuntu中Python3找不到_sqlite3模块

今天跑一个代码&#xff0c;出现了一个找不到sqlite3模块的错误&#xff0c;错误如下: from _sqlite3 import * ModuleNotFoundError: No module named _sqlite3 网上查资料说&#xff0c;因为python3没有自带sqlite3相关方面的支持&#xff0c;要自己先安装然后再重新编译Py…...

HarmonyOS4.0系统性深入开发37 改善布局性能

改善布局性能 Flex为采用弹性布局的容器。容器内部的所有子元素&#xff0c;会自动参与弹性布局。子元素默认沿主轴排列&#xff0c;子元素在主轴方向的尺寸称为主轴尺寸。 在单行布局场景下&#xff0c;容器里子组件的主轴尺寸长度总和可能存在不等于容器主轴尺寸长度的情况…...

Internet协议

文章目录 Internet协议网络层协议IPV4协议IP地址&#xff1a;IPv4数据报格式IP数据报的封装和分片 Internet路由协议路由信息协议RIP开放最短路径优先协议OSPF外部网关协议BGP组播协议PIM和MOSPF ARP和RARPARP协议&#xff1a;RARP协议&#xff1a; Internet控制报文协议ICMPIP…...

深度学习基础(一)神经网络基本原理

之前的章节我们初步介绍了机器学习相关基础知识&#xff0c;目录如下&#xff1a; 机器学习基础&#xff08;一&#xff09;理解机器学习的本质-CSDN博客 机器学习基础&#xff08;二&#xff09;监督与非监督学习-CSDN博客 机器学习基础&#xff08;四&#xff09;非监督学…...

2024年2月22日 - mis

rootyy3568-alip:/sys# ls /sys/class/gpio/gpio* -F /sys/class/gpio/gpio114 /sys/class/gpio/gpiochip511 /sys/class/gpio/gpiochip0 /sys/class/gpio/gpiochip64 /sys/class/gpio/gpiochip128 /sys/class/gpio/gpiochip96 /sys/class/gpio/gpiochip32符号表示该文…...

拼接 URL(C 语言)【字符串处理】

题目来自于博主算法大师的专栏&#xff1a;最新华为OD机试C卷AB卷OJ&#xff08;CJavaJSPy&#xff09; https://blog.csdn.net/banxia_frontend/category_12225173.html 题目 给定一个 url 前缀和 url 后缀 通过,分割 需要将其连接为一个完整的 url 如果前缀结尾和后缀开头都…...

故障排除:Failed to load SQL Modules into database Cluster

PostgreSQL 安装和故障排除 重新安装前的准备工作 在重新安装 PostgreSQL 之前&#xff0c;确保完成以下步骤&#xff1a; 重新卸载 PostgreSQL 并重启电脑。 删除以下目录&#xff1a; C:\Program Files\PostgreSQL\13C:\Users\admin\AppData\Roaming\pgadmin 重启安装过…...

【超详细】HIVE 日期函数(当前日期、时间戳转换、前一天日期等)

文章目录 相关文献常量&#xff1a;当前日期、时间戳前一天日期、后一天日期获取日期中的年、季度、月、周、日、小时、分、秒等时间戳转换时间戳 to 日期日期 to 时间戳 日期之间月、天数差 作者&#xff1a;小猪快跑 基础数学&计算数学&#xff0c;从事优化领域5年&#…...

[ffmpeg] x264 配置参数解析

背景 创建 x264 编码器后&#xff0c;其有一组默认的编码器配置参数&#xff0c;也可以根据需要修改参数&#xff0c;来满足编码要求。 具体参数 可修改的参数&#xff0c;比较多&#xff0c;这边只列举一些常用的。 获取可以配置的参数 方式1 查看 ffmpeg源码 libx264.c…...

GO语言基础总结

多态&#xff1a; 定义一个父类的指针&#xff08;接口&#xff09;&#xff0c;然后把指针指向子类的实例&#xff0c;再调用这个父类的指针&#xff0c;然后子类的方法被调用了&#xff0c;这就是多态现象。 Golang 高阶 goroutine 。。。。。 channel channel的定义 …...

飞天使-linux操作的一些技巧与知识点7-devops

文章目录 简述devopsCICD 简述devops 让技术团队&#xff0c;运维&#xff0c;测试等团队实现一体式流程自动化 进阶版图 CICD 持续集成&#xff0c; 从编译&#xff0c;测试&#xff0c;发布的完成自动化流程 持续交付&#xff0c;包含持续集成&#xff0c;并且将项目部署…...

Sora:视频生成模型作为世界模拟器

我们探索了视频数据上生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和长宽比的视频和图像上联合训练文本条件扩散模型。我们利用了一个在视频和图像潜在码的时空块上操作的变压器架构。我们规模最大的模型 Sora 能够生成一分钟的高保真视频。我们的结…...

FairyGUI × Cocos Creator 3.x 使用方式

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

基于Java的养生健康管理系统

物质生活的丰富而使得人们已经不仅仅满足于吃饱而向着吃好、吃健康的方向阔步前进。生活方式的改变使人们在日常摄入了大量的营养却没有足够的运动进行消耗&#xff0c;因此而导致肥胖成为当前城市生活的主要标志&#xff0c;而高血压、糖尿病等慢性疾病也在偷偷吞噬着人们健康…...

Python课堂16——异常查找及处理

文章目录 前言一、异常是什么&#xff1f;二、异常处理1. 根据提示2. 捕获异常3.抛出异常——raise4.应用场景 总结 前言 我们在日常编写代码的时候&#xff0c;难免会遇到一些不可控的错误&#xff0c;这无疑会导致程序的终止&#xff0c;大大降低了程序的实用性&#xff0c;…...

任务书参考答案-模块1任务一

1.根据网络拓扑图所示,按照IP 地址规划表,对防火墙的名称、各接口IP 地址进行配置。共8 分,每错1 处(行)扣1 分,扣完为止。地址、安全域、接口(状态为UP)、名称都正确。 2.根据网络拓扑图所示,按照IP 地址规划表,对三层交换机的名称进行配置,创建VLAN 并将相应接口划…...

2023最新盲盒交友脱单系统源码

源码获取方式 搜一搜&#xff1a;万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新&#xff0c;会陆续更新上 或 源码软件库 最新盲盒交友脱单系统源码&#xff0c;纸条广场&#xff0c;单独抽取/连抽/同城抽取/高质量盒子 新增功能包括心动推荐&#xff…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...