用 vc++ mfc实现一维小波硬阈值函数或软阈值函数去噪

用 vc++ mfc实现一维小波硬阈值函数或软阈值函数去噪,第1张

一般情况下,这个阈值函数的选取与噪声的方差是紧密相关的。

通常情况下,现在论文中的噪声都是选用高斯白噪声。

被噪声污染的信号=干净的信号+噪声,

由于信号在空间上(或者时间域)是有一定连续性的,因此在小波域,有效信号所产生的小波系数其模值往往较大;而高斯白噪声在空间上(或者时间域)是没有连续性的,因此噪声经过小波变换,在小波阈仍然表现为很强的随机性,通常仍认为是高斯白噪的。

那么就得到这样一个结论:在小波域,有效信号对应的系数很大,而噪声对应的系数很小。

刚刚已经说了,噪声在小波域对应的系数仍满足高斯白噪分布。如果在小波域,噪声的小波系数对应的方差为sigma,那么根据高斯分布的特性,绝大部分(9999%)噪声系数都位于[-3sigma,3sigma]区间内。因此,只要将区间[-3sigma,3sigma]内的系数置零(这就是常用的硬阈值函数的作用),就能最大程度抑制噪声的,同时只是稍微损伤有效信号。将经过阈值处理后的小波系数重构,就可以得到去噪后的信号。

常用的软阈值函数,是为了解决硬阈值函数“一刀切”导致的影响(模小于3sigma的小波系数全部切除,大于3sigma全部保留,势必会在小波域产生突变,导致去噪后结果产生局部的抖动,类似于傅立叶变换中频域的阶跃会在时域产生拖尾)。软阈值函数将模小于3sigma的小波系数全部置零,而将模大于3sigma的做一个比较特殊的处理,大于3sigma的小波系数统一减去3sigma,小于-3sigma的小波系数统一加3sigma。经过软阈值函数的作用,小波系数在小波域就比较光滑了,因此用软阈值去噪得到的图象看起来很平滑,类似于冬天通过窗户看外面一样,像有层雾罩在图像上似的。

比较硬阈值函数去噪和软阈值函数去噪:硬阈值函数去噪所得到的峰值信噪比(PSNR)较高,但是有局部抖动的现象;软阈值函数去噪所得到的PSNR不如硬阈值函数去噪,但是结果看起来很平滑,原因就是软阈值函数对小波系数进行了较大的 “社会主义改造”,小波系数改变很大。因此各种各样的阈值函数就出现了,其目的我认为就是要使大的系数保留,小的系数被剔出,而且在小波域系数过渡要平滑。

还有的什么基于隐马尔科夫模型去噪,高斯混合尺度去噪(英文缩写好像是GSR,不好意思,记不大清楚了)和自适应阈值去噪等,也就是利用有效信号的小波系数和噪声的小波系数在小波域的分布特征不同等特征来进行有效信号的小波系数和噪声的小波系数在小波域的分离,然后重构得到去噪后的信号。

说了这么多,忘了关键的一点,如何估计小波域噪声方差sigma的估计,这个很简单:把信号做小波变换,在每一个子带利用robust estimator估计就可以(可能高频带和低频带的方差不同)。

robust estimator就是将子带内的小波系数模按大小排列,然后取最中间那个,然后把最中间这个除以06745就得到噪声在某个子带内的方差sigma。利用这个sigma,然后选种阈值函数,就可以去去噪了~~

"软阈值函数"

英文对照soft threshold function;"软阈值函数" 在学术文献中的解释  

软阈值函数定义为:Y=X-T,X≥TX+T,X≤-T0,|X|小波变换的系数,T是预先选定的阈值而阈值的量化采用固定阈值法,其定义为:T=σ2log(N),这里N为信号采样的数目,σ为噪声的标准偏差

很复杂

来自 大科学 团队

常用的软阈值函数,是为了解决硬阈值函数“一刀切”导致的影响(模小于3sigma的小波系数全部切除,大于3sigma全部保留,势必会在小波域产生突变,导致去噪后结果产生局部的抖动,类似于傅立叶变换中频域的阶跃会在时域产生拖尾)。软阈值函数将模小于3sigma的小波系数全部置零,而将模大于3sigma的做一个比较特殊的处理,大于3sigma的小波系数统一减去3sigma,小于-3sigma的小波系数统一加3sigma。经过软阈值函数的作用,小波系数在小波域就比较光滑了,因此用软阈值去噪得到的图象看起来很平滑,类似于冬天通过窗户看外面一样,像有层雾罩在图像上似的。

一般情况下,这个阈值函数的选取与噪声的方差是紧密相关的。

通常情况下,现在论文中的噪声都是选用高斯白噪声。

被噪声污染的信号=干净的信号+噪声,

由于信号在空间上(或者时间域)是有一定连续性的,因此在小波域,有效信号所产生的小波系数其模值往往较大;而高斯白噪声在空间上(或者时间域)是没有连续性的,因此噪声经过小波变换,在小波阈仍然表现为很强的随机性,通常仍认为是高斯白噪的。

那么就得到这样一个结论:在小波域,有效信号对应的系数很大,而噪声对应的系数很小。

刚刚已经说了,噪声在小波域对应的系数仍满足高斯白噪分布。如果在小波域,噪声的小波系数对应的方差为sigma,那么根据高斯分布的特性,绝大部分(9999%)噪声系数都位于[-3sigma,3sigma]区间内。因此,只要将区间[-3sigma,3sigma]内的系数置零(这就是常用的硬阈值函数的作用),就能最大程度抑制噪声的,同时只是稍微损伤有效信号。将经过阈值处理后的小波系数重构,就可以得到去噪后的信号。

常用的软阈值函数,是为了解决硬阈值函数“一刀切”导致的影响(模小于3sigma的小波系数全部切除,大于3sigma全部保留,势必会在小波域产生突变,导致去噪后结果产生局部的抖动,类似于傅立叶变换中频域的阶跃会在时域产生拖尾)。软阈值函数将模小于3sigma的小波系数全部置零,而将模大于3sigma的做一个比较特殊的处理,大于3sigma的小波系数统一减去3sigma,小于-3sigma的小波系数统一加3sigma。经过软阈值函数的作用,小波系数在小波域就比较光滑了,因此用软阈值去噪得到的图象看起来很平滑,类似于冬天通过窗户看外面一样,像有层雾罩在图像上似的。

比较硬阈值函数去噪和软阈值函数去噪:硬阈值函数去噪所得到的峰值信噪比(PSNR)较高,但是有局部抖动的现象;软阈值函数去噪所得到的PSNR不如硬阈值函数去噪,但是结果看起来很平滑,原因就是软阈值函数对小波系数进行了较大的 “社会主义改造”,小波系数改变很大。因此各种各样的阈值函数就出现了,其目的我认为就是要使大的系数保留,小的系数被剔出,而且在小波域系数过渡要平滑。

还有的什么基于隐马尔科夫模型去噪,高斯混合尺度去噪(英文缩写好像是GSR,不好意思,记不大清楚了)和自适应阈值去噪等,也就是利用有效信号的小波系数和噪声的小波系数在小波域的分布特征不同等特征来进行有效信号的小波系数和噪声的小波系数在小波域的分离,然后重构得到去噪后的信号。

说了这么多,忘了关键的一点,如何估计小波域噪声方差sigma的估计,这个很简单:把信号做小波变换,在每一个子带利用robust estimator估计就可以(可能高频带和低频带的方差不同)。

robust estimator就是将子带内的小波系数模按大小排列,然后取最中间那个,然后把最中间这个除以06745就得到噪声在某个子带内的方差sigma。利用这个sigma,然后选种阈值函数,就可以去去噪了~~

自适应滤波

clear all

I1=imread('1jpg');

I=rgb2gray(I1);

J=imnoise(I,'gaussian',0,005); %添加均值为0,方差为005的高斯噪声

K1=wiener2(J,[5,5]);

figure

imshow(J);

title('加入高斯噪声图像');

figure

imshow(K1);

title('55窗口自适应滤波');

小波软阈值

clear all

I1=imread('1jpg');

I=rgb2gray(I1);

J=imnoise(I,'gaussian',0,005); %添加均值为0,方差为005的高斯噪声

[Cr, Sr] = wavedec2(J, 2, 'sym4');

thr= Donoho(J);

J_soft = wdenoise(xr, 'gbl', 's', thr, 'sym4', 2);

figure; imshow(J_soft);

/////////////////////////////////用到的函数

function thr = Donoho(x)

%用Donoho通用阈值公式计算阈值 x为要进行处理的图像

% thr = delta sqrt( 2 log(n))

% n为信号的长度或尺寸

% delta = MAD / 06745 -经验公式,其中MAD为小波分解后高子带系数的中值

n = prod( size(x) ); %图像尺寸

%计算delta

[C, S] = wavedec2(x, 1, 'db1'); %小波分解

d = C( prod( S(1,:) ) + 2 prod( S(2,:) ) + 1 : end); %HH子带系数

delta = median( abs(d) ) / 06745;

%计算阈值

thr = delta sqrt(2log(n));

////////////////////////////////////用到的函数

function X = wdenoise(x, measure, sorh, thr, wname, n)

% 阈值去噪函数

% x为带噪声图像

% measure表示全局或局部

% sorh表示软硬阈值方法

% thr为阈值

% wname为小波函数名

% n为分解层次

[C, S] = wavedec2(x, n, wname); % 对图像进行小波分解

switch measure

case 'gbl' % 全局阈值方法

dcoef = C( prod(S(1, :)) + 1 : end); % 提取细节部分系数

switch sorh

case 'h' % 硬阈值

dcoef = dcoef (abs(dcoef) > thr);

case 's' % 软阈值

temp = abs(dcoef) - thr;

temp = (temp + abs(temp)) / 2;

dcoef = sign(dcoef) temp;

end

C( prod(S(1, :)) + 1 : end) = dcoef;

case 'lvd' % 局部阈值方法

for i = n:-1:1 % 每层单独处理

k = size(S,1) - i;

first = prod(S(1, :)) +

3 sum(S(2:k-1, 1) S(2:k-1, 2)) + 1;

% 第i层细节系数的起始位置

last = first + 3prod(S(k,:)) - 1; % 终止位置

dcoef = C(first : last); % 细节系数

switch sorh

case 'h' % 硬阈值

dcoef = dcoef (abs(dcoef) > thr(i));

case 's' % 软阈值

temp = abs(dcoef) - thr(i);

temp = (temp + abs(temp)) / 2;

dcoef = sign(dcoef) temp;

end

C(first:last) = dcoef;

end

end

X = waverec2(C, S, wname); % 重构图像

一般情况下,这个阈值函数的选取与噪声的方差是紧密相关的。

通常情况下,现在论文中的噪声都是选用高斯白噪声。

被噪声污染的信号=干净的信号+噪声,

由于信号在空间上(或者时间域)是有一定连续性的,因此在小波域,有效信号所产生的小波系数其模值往往较大;而高斯白噪声在空间上(或者时间域)是没有连续性的,因此噪声经过小波变换,在小波阈仍然表现为很强的随机性,通常仍认为是高斯白噪的。

那么就得到这样一个结论:在小波域,有效信号对应的系数很大,而噪声对应的系数很小。

刚刚已经说了,噪声在小波域对应的系数仍满足高斯白噪分布。如果在小波域,噪声的小波系数对应的方差为sigma,那么根据高斯分布的特性,绝大部分(9999%)噪声系数都位于[-3sigma,3sigma]区间内。因此,只要将区间[-3sigma,3sigma]内的系数置零(这就是常用的硬阈值函数的作用),就能最大程度抑制噪声的,同时只是稍微损伤有效信号。将经过阈值处理后的小波系数重构,就可以得到去噪后的信号。

常用的软阈值函数,是为了解决硬阈值函数“一刀切”导致的影响(模小于3sigma的小波系数全部切除,大于3sigma全部保留,势必会在小波域产生突变,导致去噪后结果产生局部的抖动,类似于傅立叶变换中频域的阶跃会在时域产生拖尾)。软阈值函数将模小于3sigma的小波系数全部置零,而将模大于3sigma的做一个比较特殊的处理,大于3sigma的小波系数统一减去3sigma,小于-3sigma的小波系数统一加3sigma。经过软阈值函数的作用,小波系数在小波域就比较光滑了,因此用软阈值去噪得到的图象看起来很平滑,类似于冬天通过窗户看外面一样,像有层雾罩在图像上似的。

比较硬阈值函数去噪和软阈值函数去噪:硬阈值函数去噪所得到的峰值信噪比(PSNR)较高,但是有局部抖动的现象;软阈值函数去噪所得到的PSNR不如硬阈值函数去噪,但是结果看起来很平滑,原因就是软阈值函数对小波系数进行了较大的 “社会主义改造”,小波系数改变很大。因此各种各样的阈值函数就出现了,其目的我认为就是要使大的系数保留,小的系数被剔出,而且在小波域系数过渡要平滑。

还有的什么基于隐马尔科夫模型去噪,高斯混合尺度去噪(英文缩写好像是GSR,不好意思,记不大清楚了)和自适应阈值去噪等,也就是利用有效信号的小波系数和噪声的小波系数在小波域的分布特征不同等特征来进行有效信号的小波系数和噪声的小波系数在小波域的分离,然后重构得到去噪后的信号。

说了这么多,忘了关键的一点,如何估计小波域噪声方差sigma的估计,这个很简单:把信号做小波变换,在每一个子带利用robust estimator估计就可以(可能高频带和低频带的方差不同)。

robust estimator就是将子带内的小波系数模按大小排列,然后取最中间那个,然后把最中间这个除以06745就得到噪声在某个子带内的方差sigma。利用这个sigma,然后选种阈值函数,就可以去去噪了~~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12188338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存