图像(矩阵)稀疏度的计算
文献[1]中提出了,可以利用L1范数和L2范数之间的差异度来衡量矩阵的稀疏度,公式如下:
其中可以理解为信号;表示包含的元素的个数。是[0,1]之间的数,值越大,说明x的稀疏度越大。那稀疏度怎么理解好呢?其实我们可以理解为一个向量中不为零的数的个数。不为零的个数越多则稀疏度越大,推广到矩阵也一样的道理。从公式中可以看出,当图像块越平滑稀疏度越小,图像重构效果越好,当图像块纹理越多时稀疏度越大,图像重构效果越差。
L1范数和L2范数:
L1范数:所有元素的绝对值之和。
L2范数:所有元素的平方之和的平方根。
计算x的稀疏度,可以分三步:
- 计算x中所包含的元素个数n。
- 计算x的L1范数。
- 计算x的L2范数。
基于Matlab的稀疏度计算
function sparseness = sparseness(X)
% X可以是向量或是矩阵
[m,n] = size(X);
num = m*n;
% 分别计算L1和L2范数
s1 = 0;
s2 = 0;
for i=1:m
for j=1:n
s1 = s1+X(i,j);
s2 = s2+X(i,j)^2;
end
end
% 计算稀疏度
s2 = sqrt(s2);
c = s1/s2;
a = sqrt(num)-c;
b = sqrt(num)-1;
sparseness = a/b;
-
Non-negative Matrix Factorization with Sparseness Constraints ↩
网友评论