噪声估计程序

这一段时间,想着怎么修改噪声估计程序,以使得获得更快的速度,而且多编写了一些,使得对3维和1维的数据也能使用。

不多说以下是程序

%% 该函数估计图像(信号)的噪声水平
% 这里假设噪声为高斯白噪声
% 由于各种问题,函数只估计1、2、3维数据的噪声,一般而言,这是足够的.....
% An Efficient Statistical Method for Image Noise Level Estimation
% Guangyong Chen1, Fengyuan Zhu1, and Pheng Ann Heng1,2
function [delta]=Noisele(M,d)
M=squeeze(M);
SizeM=size(M);
%% 一维情形
if SizeM(2)==1
if nargin<2
d=65;
end
X=zeros(SizeM(1)-d,d);
for ii=1:SizeM(1)-d
F=M(ii:SizeM(1)-d+ii-1);
X(:,ii)=F(:);
end
else
if nargin<2
d=9;
end
%% 二维情形
if length(SizeM)==2
%% 将每一小斑块列化
X=zeros((SizeM(1)-d)*(SizeM(2)-d),d^2);
for ii=1:d
for jj=1:d
F=M(ii:SizeM(1)-d+ii-1,jj:SizeM(2)-d+jj-1);
X(:,jj+(ii-1)*d)=F(:);
end
end
else
%% 三维情形
X=zeros((SizeM(1)-d)*(SizeM(2)-d)*(SizeM(3)-d),d^3);
index=1;
for ii=1:d
for jj=1:d
for kk=1:d
F=M(ii:SizeM(1)-d+ii-1,jj:SizeM(2)-d+jj-1,kk:SizeM(3)-d+kk-1);
X(:,index)=F(:);
index=index+1;
end
end
end
end
end
[delta]=NoiseLevel(X);
end

function [delta]=NoiseLevel(X)
[~,mm]=size(X);
%% 求协方差矩阵
F=cov(X);
%% 求协方差矩阵的特征值并降序排列
[~,D]=eig(F);
D=real(diag(D));
D=sort(D,‘descend‘);
%% 估计噪声大小
for ii=1:mm
t=sum(D(ii:mm))/(mm+1-ii);
F=floor((mm+ii)/2);
F1=F-1;
F2=min(F+1,mm);
if (t<=D(F1))&&(t>=D(F2))
delta=sqrt(t);
break;
end
end
end

程序的改进在于两个方面,一是使用了协方差函数cov

二是在数据的操作上,结合MATLAB的特性,减小了循环次数。

以下是一个多维通用版本,但速度相比之前的要慢一半

可以处理高维数据,但是噪声估计算法估计高维数据的速度会很慢

function [dt]=Noisle(M)
SizeM=size(M);
d=9;
if SizeM(2)==1
SizeM=SizeM(1);d=65;end
Length_sizem=length(SizeM);
Lengthm=length(M(:));

Numberplus=ones(Length_sizem,1);
Numberdim=(SizeM(1)-d)*ones(Length_sizem,1);
index=(1:Lengthm)‘;
Label=index;
for ii=1:Length_sizem
if ii>1
Numberdim(ii)=(SizeM(ii)-d)*Numberdim(ii-1);
Numberplus(ii)=(SizeM(ii-1))*Numberplus(ii-1);
end
indexi=mod(ceil(index/Numberplus(ii)),SizeM(ii));
indexi(indexi>SizeM(ii)-d)=0;
Label(indexi==0)=0;
end

Label(Label==0)=[];
dlength=d^Length_sizem;
X=zeros(Numberdim(Length_sizem),dlength);
for ii=1:dlength
Labelplus=0;fj=ii;
for jj=1:Length_sizem
mj=mod(fj,d);
if mj==0
mj=d;
end
Labelplus=Labelplus+mj*Numberplus(jj);
fj=floor(fj/d);
end
F=M(Label+Labelplus-1);
X(:,ii)=F(:);
end
W=cov(X);
[~,D]=eig(W);
D=real(diag(D));
D=sort(D,‘descend‘);
for ii=1:dlength
t=sum(D(ii:dlength))/(dlength+1-ii);
F=floor((dlength+ii)/2);
F1=F-1;
F2=min(F+1,dlength);
if (t<=D(F1))&&(t>=D(F2))
dt=sqrt(t);
break;
end
end

@版权所有,转载请说明出处

原文地址:https://www.cnblogs.com/feiyujiangjun/p/8455233.html

时间: 2024-11-09 17:00:26

噪声估计程序的相关文章

语音增强原理之噪声估计

语音增强的整个过程,通常假设噪声为加性随机平稳噪声,且语音短时平稳,下面的原理描述中,都是在这两个假设前提之下来做的.整个语音增强的流程大致可以分为两大部分 一.噪声估计 二.衰减因子(有的地方也叫做增益因子)的计算 最后,把衰减因子应用于带噪语音,就可以得到我们期望的“纯净语音”.语音增强最难的部分,应该是噪声估计,而不是衰减因子的确定.因些这里重点说下噪声估计部分,要进行噪声估计的话,先要了解带噪语音的特点,根据这些特点进行噪声的估计,那么,带噪语音都有哪些特点呢? (1)噪所对语音频谱的影

图像噪声估计算法

PS: 转载请注明出处 ——陈先生

Linux用户态程序计时方式详解

前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序计时产生影响. 本文将不考虑这些影响因素(相关资料可参考<深入理解计算机系统>一书),而仅仅关注Linux系统中用户态程序执行时间的计算方式.除本文所述计时方式外,还可借助外部工具统计耗时,如<Linux调试分析诊断利器——strace>一文中介绍的strace. 本文示例代码的运行环

让.NET程序快速释放内存的办法

公司里的一个程序,经过了N个人的手后发现上了生产内存会一直涨,直到物理内存几乎被占用完毕后突然就下降下来(估计是GC给释放了),然后再一直涨.这个程序主要是对字符串进行处理,困扰了我好几天,本机测试内存也有增长的趋势,但是不大明显,上生产是2.3分钟内存就上G,没找到究竟哪里的问题.从网上搜了些资料,看到可以让.NET立即释放内存,本地简单测试了一下,真的管用,但是没敢用,不知道对于多线程的程序,当一个线程显示释放内存时会不会影响到其他线程,而且我是做金融行业程序的,程序万一出问题就是事故,所以

Linux用户态程序计时方式详解[转]

转自: http://www.cnblogs.com/clover-toeic/p/3845210.html 前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序计时产生影响. 本文将不考虑这些影响因素(相关资料可参考<深入理解计算机系统>一书),而仅仅关注Linux系统中用户态程序执行时间的计算方式.除本文所述计时方式外,还可借助外部工具统计耗时

经常让程序员恼火的一些事情你是否也遇到过一些?

http://www.nowamagic.net/librarys/news/detail/685程序员是一个比较特殊的群体,他们因为长期和电脑打交道所养成的性格和脾气也是比较相近的.当然,既然是人,当然是会有性格的,也是会有脾气的.下面,让我来看看10种能把程序惹毛了的事情.一方面我们可以看看程序员的共性,另一方面我们也可以看看程序员的缺点.无论怎么样,我都希望他们对你的日常工作都是一种帮助. 程序员的代码 无论你当时觉得自己的设计和写的代码如何的漂亮和经典,过上一段时间后,再回头看看,你必然

【OpenCV】给图像添加噪声

图像噪声使图像在获取或是传输过程中收到随机信号干扰,妨碍人们对图像理解及分析处理的信号.很多时候将图像噪声看做多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述,也就是使用随机过程的描述,也就是用它的高绿分布函数和概率密度分布函数.图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道收到了噪声的污染. 下面简单介绍两种图像噪声,即椒盐噪声和高斯噪声. 1.椒盐噪声 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种

深度学习(上)

深度学习允许由多个处理层组成的计算模型来学习多个抽象层数据的表示.这些方法大大提高了目前最先进的语音识别,可视对象识别,目标检测和其他诸多领域如药物发现和基因组.深度学习发现大数据集结构很复杂,该结构使用BP算法来指示机器应该如何改变内部参数,这些参数是用于从前一层的表示来计算每层的表示.深度卷积网已经在处理图像,视频,语音和音频方面取得了突破,而递归网已经触及到连续数据,如文本和语音. 机器学习技术为现代化社会的许多方面提供了动力:从网络搜索到社交网络上的内容过滤到电子商务网站的推荐,并且越来

[译]深度学习(Yann LeCun)

深度学习 严恩·乐库  约书亚•本吉奥  杰弗里·希尔顿 摘要深度学习是计算模型,是由多个处理层学习多层次抽象表示的数据.这些方法极大地提高了语音识别.视觉识别.物体识别.目标检测和许多其他领域如药物发现和基因组学的最高水平.深学习发现复杂的结构,在大数据集,通过使用反向传播算法来说明如何一台机器应改变其内部参数,用于计算每个层中表示从前一层的表示.深度卷积网络在处理图像.视频.语音等方面都带来了新的突破,而递归网络在连续的数据,如文本和语音有更出彩的表现.引言机器学习技术增强了现代社会的许多方