压缩感知的图像仿真(MATLAB源代码)
压缩感知是一种高效获取信号的技术,通过稀疏表示和压缩测量,显著减少数据量的同时保持高质量信号恢复。文章介绍了MATLAB实现压缩感知的方法,包括使用l1_image工具包进行图像恢复。代码展示了如何生成测量矩阵、计算稀疏表示,并通过l1最小化算法求解原始信号。测试结果显示,增加测量点数显著提高恢复效果。摘要涵盖了压缩感知的基本概念、MATLAB实现步骤及测试结果,展示了压缩感知在图像恢复中的应用。
压缩感知是一种高效地获取和表示信号的技术,它具有显著的减少数据采样和传输量的能力,同时能够保持信号的高质量恢复。在压缩感知理论中,信号被表示为其在一个稀疏基中的稀疏线性组合。通过仅通过少量随机投影测量,可以有效捕捉信号的大部分信息,并且能够利用优化方法恢复原始信号。
MATLAB是一种强大的数值计算和专业编程平台,集成了众多功能模块和内置函数,为实现压缩感知的仿真与还原提供了便捷的工具。其中,l1_image软件包是一个广泛使用的工具,它通过解决l1范数最小化问题,实现了压缩感知图像的精确恢复。
借助调用l1_image这一工具,我们在MATLAB环境中实现了压缩感知方法的仿真和实验过程。该软件包集成了多个功能模块,能够生成随机投影矩阵、计算稀疏表示、完成l1范数优化计算等关键操作。通过调用这些内置功能模块,我们能够在极少量的观测数据下精确重构出高质量的原始图像。
本文将对MATLAB中的l1_image工具包进行深入解析,展示其实现压缩感知图像恢复功能的全过程。
仿真实现
下面我们看看MATLAB如何实现
MATLAB代码
说明
注释
说明
% compressed sensing example
%
%___DESCRIPTION___
% MATLAB implementation of compressive sensing example as described in R.
% Baraniuk, Compressive Sensing, IEEE Signal Processing Magazine, [118],
% July 2007. The code acquires 250 averaged random measurements of a 2500
% pixel image. We assume that the image has a sparse representation in the
% DCT domain (not very sparse in practice). Hence the image can be
% recovered from its compressed form using basis pursuit.
%
%___DEPENDENCIES___
% Requires the MATLAB toolbox l_1-MAGIC: Recovery of Sparse Signals via Convex
% Programming v1.11 by J. Candes and J. Romberg, Caltech, 2005.
%
%___VARIABLES___
% x = original signal (nx1) y = compressed signal (mx1) Phi = measurement
% matrix (mxn) Psi = Basis functions (nxn) Theta = Phi * Psi (mxn) s =
% sparse coefficient vector (to be determined) (nx1)
%
%___PROBLEM___
% Invert the matrix equation y = Theta * s and therefore recover hat_x as
% k-sparse linear combination of basis functions contained in Psi. Note
% also that y = Phi * x.
%
%___SOLUTION___
% Let Phi be a matrix of i.i.d. Gaussian variables. Solve matrix inversion
% problem using basis pursuit (BP).
%___CREATED___
% o By S.Gibson, School of Physical Sciences, University of Kent.
% o 1st May, 2013.
% o version 1.0
% o NOTES: If the max number of iterations exceeds 25, error sometimes
% occurs in l1eq_pd function call.
%
%___DISCLAIMER___
% The code below is my interpretation of Baraniuk's compressed sensing
% article. I don't claim to be an authority on the subject!
%___INPUT IMAGE___
clear, close all, clc
A = imread('lenaGray.bmp');
% A = A([50:99],[50:99]);
A = A([250:299],[250:299]); % 提取图像的一个子区域
x = double(A(:));
n = length(x);
%___MEASUREMENT MATRIX___
m = 1000; % NOTE: small error still present after increasing m to 1500;
Phi = randn(m,n);
%__ALTERNATIVES TO THE ABOVE MEASUREMENT MATRIX___
%Phi = (sign(randn(m,n))+ones(m,n))/2; % micro mirror array (mma) e.g. single
%pixel camera Phi = orth(Phi')'; % NOTE: See Candes & Romberg, l1
%magic, Caltech, 2005.
%___COMPRESSION___
y = Phi*x;
%___THETA___
% NOTE: Avoid calculating Psi (nxn) directly to avoid memory issues.
Theta = zeros(m,n);
for ii = 1:n
ii
ek = zeros(1,n);
ek(ii) = 1;
psi = idct(ek)';
Theta(:,ii) = Phi*psi;
end
%___l2 NORM SOLUTION___ s2 = Theta\y; %s2 = pinv(Theta)*y
s2 = pinv(Theta)*y;
%___BP SOLUTION___
s1 = l1eq_pd(s2,Theta,Theta',y,5e-3,20); % L1-magic toolbox
%x = l1eq_pd(y,A,A',b,5e-3,32);
%___DISPLAY SOLUTIONS___
plot(s2,'b'), hold
plot(s1,'r.-')
legend('least squares','basis pursuit')
title('solution to y = \Theta s')
%___IMAGE RECONSTRUCTIONS___
x2 = zeros(n,1);
for ii = 1:n
ii
ek = zeros(1,n);
ek(ii) = 1;
psi = idct(ek)';
x2 = x2+psi*s2(ii);
end
x1 = zeros(n,1);
for ii = 1:n
ii
ek = zeros(1,n);
ek(ii) = 1;
psi = idct(ek)';
x1 = x1+psi*s1(ii);
end
figure('name','Compressive sensing image reconstructions')
subplot(1,3,1), imagesc(reshape(x,50,50)), xlabel('original'), axis image
subplot(1,3,2), imagesc(reshape(x2,50,50)), xlabel('least squares'), axis image
subplot(1,3,3), imagesc(reshape(x1,50,50)), xlabel('basis pursuit'), axis image
colormap gray
测试结果
评估第2种的整体效果尚可,此处对源程序的观察值进行了微调。源程序选取了250个观察值,占总数的10%。本次选取了1000个观察值,占总数量的约40%。10%的测试效果令人失望。第一种表现欠佳。

增加到2000个点的效果:
可以看到明显好了很多。

增加到2200个点的效果:

哈哈哈哈哈哈哈,2500个点,

部分注释
矩阵逆运算
该公式s2 = pinv(Theta)*y代表一种基于广义逆矩阵(generalized inverse matrix)的方法,用于求解线性方程组。其中,pinv(Theta)表示矩阵Theta的Moore-Penrose伪逆矩阵(Moore-Penrose pseudo-inverse matrix)。该方法通过最小二乘估计(least squares estimation)来计算线性方程组的解。
在给定线性方程组 y = Theta s 的情况下,其中,观测向量 y 已知,系统矩阵 Theta 和未知向量 s 的关系由方程组定义。我们的目标是找到一个近似解 ŝ,使得 Theta ŝ 尽可能接近观测向量 y。然而,在实际应用中,直接求解精确解 s 经常遇到困难。此时,最小二乘法提供了一种有效的近似求解方法。
求解的步骤如下:
- 求取矩阵
Theta的Moore-Penrose伪逆矩阵pinv(Theta),该伪逆矩阵满足以下两个条件:(1)Theta * pinv(Theta) * Theta = Theta;(2)pinv(Theta) * Theta * pinv(Theta) = pinv(Theta)。 - 通过将向量
y与伪逆矩阵pinv(Theta)进行矩阵乘法运算,可以得到一个近似的解向量s2。
通过以下方式,变量s2被定义为利用最小二乘法求解线性方程组的解。这种技术在信号处理和线性代数领域具有广泛应用。需要注意的是,在特定场景下,采用其他方法可能带来更优的效果,尤其是在信号呈现稀疏特性的场景中。
求解稀疏矩阵
该代码通过调用l1eq_pd函数计算得到s1的值,其中函数参数包括s2、Theta、Theta'、y、5e-3和20。该函数基于原始-对偶内点法实现L1范数最小化,用于求解等式约束下的L1最小化问题。在压缩感知领域,该算法特别适用于解决稀疏信号重构问题。
这里是函数 l1eq_pd 的基本使用语法及含义:
s1:用于估计稀疏信号的估计值,即原始信号在稀疏域中的系数表示。
l1eq_pd:L1-magic工具箱中用于求解等式约束L1最小化问题的函数名称。
s2:最小化过程的初始解,通常可以初始化为零向量,但在此实现中采用前面计算得到的最小二乘解作为初始值,以提高算法的收敛速度。
Θ:表示测量矩阵与稀疏基之间的乘积矩阵。
Θ':为Θ矩阵的转置矩阵。
y:表示已知观测向量,即压缩感知中的测量结果向量。
5e-3:为正则化参数,用于平衡信号稀疏性和数据保真度之间的权重调节,通常需要通过实验确定合适值。
20:表示算法迭代次数,或内点法中设定的收敛容限参数。
这个函数将最小化以下的目标函数:
minimize ||s||_1 subject to Theta * s = y
这里的 ||s||_1 表示为向量 s 的 L1 范数,即所有元素绝对值之和。L1 最小化问题在 s 预计为稀疏向量时具有显著效果,因为它倾向于生成仅有少数非零元素的解,这与压缩感知理论中对稀疏性假设的刻画相契合。
总结而言,该命令旨在通过L1最小化方法求解变量 s1,其目标是在满足约束条件 Theta * s = y 的前提下,使得所得解中非零元素的数量最少。
参考资料:
主体程序的网址为:简单压缩感知示例
相关博文
深入理解并掌握OpenCV图像平滑技术的相关知识和实现方法,包括图像平滑的原理、算法实现以及如何在代码中应用这些技术来处理图像数据。
OpenCV中的边缘检测技术及其实现
OpenCV框架中,边缘检测技术作为一种关键的图像处理方法,其核心在于通过数学模型识别图像中的边界特征。该技术通过分析图像像素的梯度变化,精确提取出物体的轮廓信息。具体而言,OpenCV提供了多个边缘检测算法,包括基于Sobel算子的边缘检测方法,这些方法能够有效识别图像中的直线边界和曲线边界。在实际应用中,选择合适的边缘检测算法对于提高图像处理的准确性具有重要意义。该技术的实现通常结合OpenCV内置的函数库,通过编程实现对目标物体边缘的精确提取,为后续的图像分析和处理提供了可靠的基础。
OpenCV人脸识别技术实践案例
我的图书
下面两本书欢迎大家参考学习。
OpenCV轻松入门
李立宗的《OpenCV轻松入门》一书,以面向 Python 的 OpenCV(即 OpenCV for Python)为基础,全面阐述了图像处理的各个方面。该书以 OpenCV 官方文档的知识脉络为核心,并对细节内容进行进一步补充说明。书中不仅详细阐述了 OpenCV 各类函数的使用方法,而且深入探讨了函数实现的算法原理。
在介绍OpenCV函数的使用方法时,本书提供了丰富的程序示例,并按照由浅入深的顺序进行讲解。首先,通过直观展示函数在小数组上的使用方法、处理流程及运行结果,帮助读者更好地理解函数的基本原理、使用技巧及运行机制。在此基础上,进一步深入讲解如何更高效地处理图像。在具体算法原理部分,本书主要采用通俗易懂的语言,并结合生活中的实际案例进行说明,避免过多使用复杂的数学表达式。
本书专为计算机视觉相关领域的初学者设计,涵盖在校学生、教师、专业技术人员以及图像处理爱好者。本书第1版出版后,广受计算机视觉领域的读者喜爱,多所高校作为教材使用,累计重印九次。为了更好地满足大家的学习需求,本书进行了修订工作。

计算机视觉40例
李立宗,计算机视觉40例,电子工业出版社,2022

