2014-02-22 20:08:05 lxy201700 阅读数 5358

一:常用的噪声有高斯噪声,椒盐噪声,泊松分布噪声,指数分布噪声。

二:空域滤波器如均值滤波器,中值滤波器,低通滤波器,高斯滤波,双边滤波,引导滤波。

       频域滤波器如小波变换,傅里叶变换,余弦变换,形态学滤波(通过膨胀和腐蚀等形态学进行去噪)。

三:应用   均值,中值,低通,高斯去高斯白噪声,中值滤波可去椒盐噪声。

       双边,引导保边去噪。

      低噪度下,拍出的图片属于泊松分布噪声,可以采用一些3D去噪算法,如BM3D算法

2018-01-06 21:24:55 zhangquan2015 阅读数 42805

Github个人博客:https://joeyos.github.io

图像去噪常用方法

图像去噪处理方法可分为空间域法和变换域法两大类。

基于离散余弦变换的图像去噪

一般而言,我们认为图像的噪声在离散余弦变换结果中处在其高频部分,而高频部分的幅值一般很小,利用这一性质,就可以实现去噪。然而,同时会失去图像的部分细节。

%读取图像
X=imread('wangshi.jpg'); 
X=rgb2gray(X);
%读取图像尺寸
[m,n]=size(X); 
%给图像加噪
Xnoised=imnoise(X,'speckle',0.01); 
%输出加噪图像
subplot(121); 
imshow(Xnoised);
%DCT变换
Y=dct2(Xnoised); 
I=zeros(m,n);
%高频屏蔽
I(1:m/3,1:n/3)=1; 
Ydct=Y.*I;
%逆DCT变换
Y=uint8(idct2(Ydct)); 
%结果输出
subplot(122);
imshow(Y);

这里写图片描述

基于小波变换的图像去噪

小波去噪是小波变换较为成功的一类应用,其去噪的基本思路为:含噪图像-小波分解-分尺度去噪-小波逆变换-恢复图像。含噪信号经过预处理,然后利用小波变换把信号分解到各尺度中,在每一尺度下把属于噪声的小波系数去掉,保留并增强属于信号的小波系数,最后再经过小波逆变换恢复检测信号。比基于傅里叶变换的去噪方法好。

clear;                 
X=imread('life.jpg');            
X=rgb2gray(X);
subplot(221);          
imshow(X);             
title('原始图像');                  
% 生成含噪图像并图示
init=2055615866;       
randn('seed',init);      
X=double(X);
% 添加随机噪声
XX=X+8*randn(size(X));  
subplot(222);             
imshow(uint8(XX));              
title(' 含噪图像 ');       
%用小波函数coif2对图像XX进行2层
% 分解
[c,l]=wavedec2(XX,2,'coif2'); 
% 设置尺度向量
n=[1,2];                  
% 设置阈值向量 , 对高频小波系数进行阈值处理
p=[10.28,24.08]; 
nc=wthcoef2('h',c,l,n,p,'s');
% 图像的二维小波重构
X1=waverec2(nc,l,'coif2');   
subplot(223);              
imshow(uint8(X1));                
%colormap(map);            
title(' 第一次消噪后的图像 '); 
%再次对高频小波系数进行阈值处理
mc=wthcoef2('v',nc,l,n,p,'s');
% 图像的二维小波重构
X2=waverec2(mc,l,'coif2');  
subplot(224);             
imshow(uint8(X2));               
title(' 第二次消噪后的图像 ');   

这里写图片描述

2019-08-27 19:03:41 qq_39594939 阅读数 190

我们知道图像的经典去噪方法主要有两大类:一类是基于空间域的处理方法,一类是基于频域的处理方法。前面三节讲到的欧式基于空间域的处理方法,基于频域的处理方法主要是用滤波器,把有用的信号和干扰信号分开,它在有用信号和干扰信号的频谱没有重叠的前提下,才能把有用信号和干扰信号完全分开,但实际上很难分开。

因此图像变换域去噪算法的基本思想其实就是首先进行某种变换,将图像从空间域转换到变换域,然后从频率上把噪声分为高中低频噪声,用这种变换域的方法就可以把不同频率的噪声分离,之后进行反变换将图像从变换域转换到原始空间域,最终达到去除图像噪声的目的。

(一)傅里叶变换

傅立叶变换用于分析各种滤波器的频率特性,
对于一幅图像来说在分析其频率特性时,它的边缘,突出部分以及颗粒噪声往往代表图像信号的高频分量,而大面积的图像背景区则代表图像信号的低频分量。因此,使用滤波的方法滤除其高频部分也就可以去除噪声,使得图像得到一定的平滑。
图像是二维离散的,连续与离散都可以用傅里叶进行变换,那么二维信号无非就是在x方向与y方向都进行一次一维的傅里叶变换得到。所有图像的频率构成都认为是这样的,那么不同的就是一幅图的振幅与相位了,也就是说在opencv或者matlab下对图像进行傅里叶变换后其实是可以得到图像的振幅图与相位图的,而想把图像从频域空间恢复到时域空间,必须要同时有图像的振幅图与相位图才可以,缺少一个就恢复的不完整。

在这里插入图片描述
其中,F(u,v)是含噪声图像的傅里叶变换,G(u,v)是平滑后图像的傅里叶变换,H(u,v)是低通滤波器传递函数。处理过程如下图所示:
在这里插入图片描述
利用numoy包进行傅里叶变换

np.fft.fft2()
第一个参数是输入图像,它是灰度图像
第二个参数是可选的,它决定了输出数组的大小,如果它大于输入图像的大小,则输入图像在计算FFT之前填充了0.如果它小于输入图像,输入图像将被裁剪,如果没有参数传递,输出数组的大小将与输入相同.
一旦得到结果,零频率分量(DC分量)将位于左上角。 如果要将其置于中心位置,则需要在两个方向上将结果移动N2.np.fft.fftshift(),一旦你找到频率变换,你就能找到大小谱.

import cv2
import numpy as np
from matplotlib import pyplot as plt

img=cv2.imread('E:\opencv\yg.jpg',0)  # 直接读取灰度图像
f=np.fft.fft2(img)
fshift=np.fft.fftshift(f)
magnitude_spectrum=20*np.log(np.abs(fshift))  #取绝对值是为了将复数变换成实数,
                                              #取对数的目的是将数据变化到较小的范围(比如0--255)

plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

但是上图并没有什么含义,显示出来的可以看成是频域中图像的振幅信息,但是没有相位信息,图像的相位ϕ=atan(实部/虚部),numpy包中自带一个angle函数可以直接根据复数的实部和虚部求出角度(默认是弧度)。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img=cv2.imread('E:\opencv\yg.jpg',0)  # 直接读取灰度图像
f=np.fft.fft2(img)
fshift=np.fft.fftshift(f)

ph_f=np.angle(f)
ph_fshift=np.angle(fshift)

plt.subplot(121),plt.imshow(ph_f, cmap = 'gray')
plt.title('original'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(ph_fshift, cmap = 'gray')
plt.title('center'), plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

上图就是图像上每个像素点对应的相位图,理解就是偏移的角度。

下面介绍一下频域下的低通滤波器,高通滤波器,带通带阻滤波器。

1.高通滤波器

图像在变换加移动中心后,从中间到外面,频率上依次是从低频到高频,因此我们如果把中间一小部分去掉,就相当于高通滤波器:
黑色为0,白色为1,把这个模板和图像的傅里叶变换的频域矩阵相乘就得到了高通滤波。
在这里插入图片描述

import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('E:\opencv\yg.jpg',0)  # 直接读取灰度图像
f=np.fft.fft2(img)
fshift=np.fft.fftshift(f)
magnitude_spectrum=20*np.log(np.abs(fshift))  #取绝对值是为了将复数变换成实数,
                                              #取对数的目的是将数据变化到较小的范围(比如0--255)
rows,cols=img.shape
mask = np.ones(img.shape,img.dtype)
crow,ccol=int(rows/2),int(cols/2)
mask[crow-20:crow+20,ccol-20:ccol+20]=0  # 作高通滤波模板

fshift=mask*fshift # 滤波
f_ishift=np.fft.ifftshift(fshift)
img_back=np.fft.ifft2(f_ishift) # 傅里叶逆变换
img_back=np.abs(img_back) # 得到的是复数会无法显示

plt.subplot(221),plt.imshow(img, cmap = 'gray')
plt.title('original'), plt.xticks([]), plt.yticks([])
plt.subplot(222),plt.imshow(img_back, cmap = 'gray')
plt.title('Image after HPF'), plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

可以看出,高通滤波器有利于提取图像的轮廓。这是因为图像的轮廓或者边缘或者噪声处,灰度变化强烈,那么在它们经过傅里叶变换后,就会变成高频信号。

2.低通滤波器

低通滤波器就是把上述模板的1变成0,0变成1:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img=cv2.imread('E:\opencv\yg.jpg',0)  # 直接读取灰度图像
f=np.fft.fft2(img)
fshift=np.fft.fftshift(f)
magnitude_spectrum=20*np.log(np.abs(fshift))  #取绝对值是为了将复数变换成实数,
                                              #取对数的目的是将数据变化到较小的范围(比如0--255)

rows,cols=img.shape
mask = np.zeros(img.shape,img.dtype)
crow,ccol=int(rows/2),int(cols/2)
mask[crow-20:crow+20,ccol-20:ccol+20]=1  # 作低通滤波模板

fshift=mask*fshift # 滤波
f_ishift=np.fft.ifftshift(fshift)
img_back=np.fft.ifft2(f_ishift) # 傅里叶逆变换
img_back=np.abs(img_back) # 得到的是复数会无法显示

plt.subplot(221),plt.imshow(img, cmap = 'gray')
plt.title('original'), plt.xticks([]), plt.yticks([])
plt.subplot(222),plt.imshow(img_back, cmap = 'gray')
plt.title('Image after LPF'), plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

可以看到低通滤波后除了轮廓模糊外,基本没变化,这是因为图像的主要信息都集中到了低频上。

3.带通滤波器

import cv2
import numpy as np
from matplotlib import pyplot as plt

img=cv2.imread('E:\opencv\yg.jpg',0)  # 直接读取灰度图像
f=np.fft.fft2(img)
fshift=np.fft.fftshift(f)

rows,cols=img.shape
mask1 = np.ones(img.shape,img.dtype)
mask2 = np.zeros(img.shape,img.dtype)
crow,ccol=int(rows/2),int(cols/2)
mask1[crow-8:crow+8,ccol-8:ccol+8]=0  # 作高通滤波
mask2[crow-80:crow+80,ccol-80:ccol+80]=1  # 作低通滤波模板
mask=mask1*mask2  # 带通滤波

fshift=mask*fshift # 滤波
f_ishift=np.fft.ifftshift(fshift)
img_back=np.fft.ifft2(f_ishift) # 傅里叶逆变换
img_back=np.abs(img_back) # 得到的是复数会无法显示

plt.subplot(221),plt.imshow(img, cmap = 'gray')
plt.title('original'), plt.xticks([]), plt.yticks([])
plt.subplot(222),plt.imshow(img_back, cmap = 'gray')
plt.title('Image after BPF'), plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

带通滤波的效果,既保留了一部分低频,也保留了一部分高频。

(二)基于小波变换的图像去噪技术

傅里叶变换对于非平稳过程有局限性:它只能获取一段信号总体上包含哪些频率的成分,但是对各个成分出现的时刻不清楚。因此时域相差很大的两个信号,可能频谱图一样。
但是对于一个非平稳信号,只知道包含哪些频率成分时不够的,我们还想知道各个成分出现的时间知道信号频率随时间变化的情况,各个时刻的顺时频率及其幅值----时频分析
小波把傅里叶变换的基换了,将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率,还可以定位到时间了。

1.小波阈值去噪介绍

主要思想是经过小波变换后图像和噪声的统计特性不同,其中图像本身的小波系数具有较大幅值,主要集中在高频,噪声小波系数幅值较小,并且存在于小波变换后的所有系数中。因此设置一个阈值门限来进行分离
通常在去噪时,不处理含有大量图像能量的低通系数,只是就单个高通部分进行处理。因此不能只进行一次阈值去噪,还需要对低频部分进行阈值去噪和小波分解,直到估计噪声和实际图像的偏差值最小。一般进行3-4层小波分解和去噪就可以了。

2.小波阈值去噪方法
算法的基本过程为:
①对原始信号进行小波分解
②对变换后的小波系数进行阈值处理,得到估计小波系数
③根据估计小波系数进行小波重构

在这里插入图片描述

3.小波阈值去噪基本问题

  1. 小波基的选择:通常我们希望所选取的小波满足以下条件:正交性、高消失矩、紧支性、对称性或反对称性。但事实上具有上述性质的小波是不可能存在的,因为小波是对称或反对称的只有Haar小波,并且高消失矩与紧支性是一对矛盾,所以在应用的时候一般选取具有紧支的小波以及根据信号的特征来选取较为合适的小波。
  2. 阈值的选择:直接影响去噪效果的一个重要因素就是阀值的选取,不同的阈值选取将有不同的去噪效果。目前主要有通用阈值(VisuShrink)、SureShrink阈值、Minimax阈值、BayesShrink阈值等。
  3. 阈值函数的选择:阈值函数是修正小波系数的规则,不同的反之函数体现了不同的处理小波系数的策略。最常用的阈值函数有两种:一种是硬阈值函数,另一种是软阈值函数。还有一种介于软、硬阈值函数之间的Garrote函数。

利用阈值函数pywt.threshold:
在这里插入图片描述

import pywt
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import math

# np.linspace()函数用于在指定的间隔内返回均匀间隔的数字。
data=np.linspace(1,10,10)
#[1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]

# pywt.threshold(data,value,mode,substitute) mode 模式有四种,soft,hard,greater,less;substitute是替换值

data_soft=pywt.threshold(data=data,value=6,mode='soft',substitute=12)
# soft模式把小于6的值设置为12,大于等于6的值全部减6
#[12. 12. 12. 12. 12. 0. 1. 2. 3. 4.]

data_hard=pywt.threshold(data=data,value=6,mode='hard',substitute=12)
# hard模式把小于6的值设置为12,其余的值不变
#[12. 12. 12. 12. 12. 6. 7. 8. 9. 10.]

data_greater=pywt.threshold(data,6,'greater',12)
# 把小于6的值设为12,大于等于阈值的值不变
#[12. 12. 12. 12. 12. 6. 7. 8. 9. 10.]

data_less=pywt.threshold(data,6,'less',12)
# 把大于6的值设为12,小于等于阈值的值不变
#[1. 2. 3. 4. 5. 6. 12. 12. 12. 12. 12. ]

4.小波去噪实验

pywt.dwt_max_level(data_len,filter_len):在这里插入图片描述
pywt.wavedec(data, wavelet, mode=‘symmetric’, level=None, axis=-1)
data:输入数据,wavelet:使用的小波,level:分解级别,默认为dwt_max_len
返回:[cA_n, cD_n, cD_n-1, …, cD2, cD1]
n代表分解的级别,第一个cA_n代表的是近似分解系数,接下来的元素cD_n-cD1代表的是系数数组的详细信息

import pywt
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import math

data=np.linspace(1,10,10)

# Get Data
ecg=pywt.data.ecg() # 生成心电信号
index=[]
data=[]
for i in range(len(ecg)-1):
    X=float(i)
    Y=float(ecg[i])
    index.append(X)
    data.append(Y)
    
# Create wavelet object and define parameters 
w=pywt.Wavelet('db8') # 创建一个小波对象 选用Daubechies8小波
#  Family name:    Daubechies
#  Short name:     db
#  Filters length: 16  #滤波器长度为16
#  Orthogonal:     True  #正交
#  Biorthogonal:   True  #双正交
#  Symmetry:       asymmetric  # 对称性:不对称
#  DWT:            True  #离散小波变换
#  CWT:            False
maxlev=pywt.dwt_max_level(len(data),w.dec_len)  # 计算最大有用的分解级别(data_len,filter_len)
print("maximum level is " + str(maxlev))
threshold=0.04 # Threshold for filtering

# Decompose into wavelet components,to the level selected
coeffs=pywt.wavedec(data,'db8',level=maxlev)

plt.figure()
for i in range(1,len(coeffs)):
    coeffs[i]=pywt.threshold(coeffs[i],threshold*max(coeffs[i]))  # 将噪声滤波

datarec=pywt.waverec(coeffs,'db8')  # 将信号进行小波重构

mintime=0
maxtime=mintime+len(data)+1

plt.figure()
plt.subplot(2,1,1)
plt.plot(index[mintime:maxtime],data[mintime:maxtime])
plt.xlabel('time(s)')
plt.ylabel('microvolts (uV)')
plt.title("Raw signal")
plt.subplot(2,1,2)
plt.plot(index[mintime:maxtime],datarec[mintime:maxtime-1])
plt.xlabel('time(s)')
plt.ylabel('microvolts (uV)')
plt.title("De-noised signal using wavelet techniques")

plt.tight_layout()
plt.show()

在这里插入图片描述
参考链接:
Python小波变换去噪
图像滤波和傅里叶变换

2014-11-02 12:00:05 feifei20141029 阅读数 3165

图像去噪技术及其实现

1.      什么是“图像的噪声”

    噪声可以理解为“妨碍人们感觉器官对所接收的信源信息理解的因素”。噪声在理论上定义为“不可预测、只能用概率统计方法来认识的随机误差”。因此,将图像噪声看成是多维随机过程是合适的,因而描述噪声的方法完全可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。但在很多情况下,这样的描述方法是很复杂的,甚至是不可能的,而实际应用往往也不必要。通常是用其数字特征,即均值方差、相关函数等,因为这些数字特征都可以从某些方面反映出噪声的特征。

图像噪声按其产生的原因可以分为:

  ①  外部噪声,即指系统外部干扰以电磁波的形式进入系统内部而引起的噪声,如电气设备、天体放电现象等引起的噪声。

  ②  内部噪声:一般又可以分为以下四种。

     Ø  由光和电的基本性质所引起的噪声。

     Ø  电器的机械运动产生的噪声,如各种接头因抖动引起电流变化所产生的噪声,磁头、磁带等运动。

     Ø  器材材料本身引起的噪声,如正片和负片的表面颗粒性和磁带磁盘表面缺陷所产生的噪声。随着材料科学的发展,这些噪声有望不断减少,但目前还是不可避免的。

     Ø  系统内部设备电路所引起的噪声,如电源引入的交流噪声,偏转系统所引起的噪声等。

    图像噪声从统计理论观点可以分为平稳和非平稳噪声两种:统计特性不随时间变化的噪声称为平稳噪声;统计特性随时间变化而变化的噪声称为非平稳噪声。

2.      图像去噪常用方法

    图像的去噪处理方法可以分为空间域法和变换域法两大类。前者是在原图像上直接进行数据运算,对像素的灰度值进行处理。后者是在图像的变换域上进行处理,对变换后的系数进行相应的处理,然后进行反变换达到图像去噪的目的。

2.1  基于离散余弦变换的图像去噪

    基于离散余弦变换对图像的噪声抑制原理如下:一般而言,我们认为图像的噪声在离散余弦变换结果中处在其高频部分,而高频部分的幅值一般很小,利用这一性质,就很容易实现图像的噪声抑制。当然,这会同时失去图像的部分细节。

 

 

Fig.1  添加噪声的图像和去噪后的图像

2.2  基于小波变换的图像去噪

    小波去噪是小波变换较为成功的一类应用,其去噪的基本思路如下:

     因此,利用小波变换在去除噪声时可提取并保存对视觉起主要作用的边缘信息。而传统的基于傅里叶变换去噪方法在去除噪声和边沿保持上存在着矛盾,原因是傅里叶变换方法在时域不能局部化,难以检测到局域突变信号,在去除噪声的同时,也损失了图像边沿信息。由此可见,与基于傅里叶变换去噪方法相比,基于小波变换去噪方法具有明显的优越性。

     Donoho提出的小波阈值去噪方法的基本思想是:当小波系数小于某个临界阈值时,认为这时的小波系数主要是由噪声引起的,予以舍弃;当小波系数大于这个临界阈值时,认为这时的小波系数主要是由信号引起,那么就把这部分小波系数直接保留下来(硬阈值方法),或者按某一个固定量向零收缩(软阈值方法),然后用新的小波系数进行小波重构得到去噪后的信号。实现步骤如下:

①  先对含噪声的信号做小波变换,得到一组小波分解系数;

②  通过对分解得到的小波系数进行阈值处理,得到估计小波系数;

③  利用估计小波系数进行小波重构,得到估计信号,即为去噪后的信号。

    阈值函数关系着重构信号的连续性和精度,对小波去噪的效果有很大影响。目前,阈值的选择主要分为硬阈值和软阈值两种处理方式。其中,软阈值处理是将信号的绝对值与 阈值进行比较,当数据的绝对值小于或等于阈值时,令其为零;大于阈值的数据点则向零收缩,变为该点值与阈值之差。而硬阈值处理时将信号的绝对值阈值进行比较,小于或等于阈值的点变为零,大于阈值的点不变。硬阈值函数的不连续性使消噪后的信号仍然含有明显的噪声;采用软阈值方法虽然连续性好,但估计小波系数与含噪声信号的小波系数之间存在恒定的偏差。

 

 

Fig.2  添加噪声的图像和小波水平垂直去噪后的图像

2017-03-09 15:09:48 mingtian715 阅读数 60064
图像去噪
       图像去噪是信号处理的一个经典问题,传统的去噪方法多采用平均或线性方法进行,常用的是维纳滤波,但是去噪效果不太好(维纳滤波在图像复原中的作用)。
小波去噪       
       随着小波理论的日益完善,其以自身良好的时频特性在图像去噪领域受到越来越多的关注,开辟了用非线性方法去噪的先河。具体来说,小波能够去噪主要得益于小波变换有如下特点:
(1)低熵性。小波系数的稀疏分布,使图像变换后的熵降低。意思是对信号(即图像)进行分解后,有更多小波基系数趋于0(噪声),而信号主要部分多集中于某些小波基,采用阈值去噪可以更好的保留原始信号。
(2)多分辨率特性。由于采用了多分辨方法,所以可以非常好地刻画信号的非平稳性,如突变和断点等(例如0-1突变是傅里叶变化无法合理表示的),可以在不同分辨率下根据信号和噪声的分布来消除噪声。
(3)去相关性。小波变换可对信号去相关,且噪声在变换后有白化趋势,所以小波域比时域更利于去噪。
(4)基函数选择灵活。小波变换可灵活选择基函数,也可根据信号特点和去噪要求选择多带小波和小波包等(小波包对高频信号再次分解,可提高时频分辨率),对不同场合,选择不同小波基函数。 

根据基于小波系数处理方式的不同,常见去噪方法可分为三类:
(1)基于小波变换模极大值去噪(信号与噪声模极大值在小波变换下会呈现不同变化趋势)
(2)基于相邻尺度小波系数相关性去噪(噪声在小波变换的各尺度间无明显相关性,信号则相反)
(3)基于小波变换阈值去噪
小波阈值去噪是一种简单而实用的方法,应用广泛,因此重点介绍。

阈值函数选择
阈值处理函数分为软阈值和硬阈值,设w是小波系数的大小,wλ是施加阈值后小波系数大小,λ为阈值。
(1)硬阈值
当小波系数的绝对值小于给定阈值时,令其为0,而大于阈值时,保持其不变,即:
                                                                                    
(2)软阈值
当小波系数的绝对值小于给定阈值时,令其为0,大于阈值时,令其都减去阈值,即:

如下图,分别是原始信号,硬阈值处理结果,软阈值处理结果。硬阈值函数在|w| = λ处是不连续的,容易造成去噪后图像在奇异点附近出现明显的伪吉布斯现象。

阈值大小的选取
阈值的选择是离散小波去噪中最关键的一部。在去噪过程中,小波阈值λ起到了决定性作用:如果阈值太小,则施加阈值后的小波系数将包含过多的噪声分量,达不到去噪的效果;反之,阈值太大,则去除了有用的成分,造成失真。小波阈值估计方法很多,这里暂不介绍。

小波去噪实现步骤
(1)二维信号的小波分解。选择一个小波和小波分解的层次N,然后计算信号s到第N层的分解。
(2)对高频系数进行阈值量化。对于从1~N的每一层,选择一个阈值,并对这一层的高频系数进行软阈值量化处理。
(3)二维小波重构。根据小波分解的第N层的低频系数和经过修改的从第一层到第N的各层高频系数,计算二维信号的小波重构

Matlab函数介绍
(1)wavedec2函数
该函数用于对多尺度二维小波进行分解,其常用调用格式:
[C,S] = wavedec2(X,N,'wname'):用小波函数wname对信号X在尺度N上的二维分解,N是严格正整数。

(2)wrcoef2函数
该函数用于对二维小波系数进行单支重构,其调用格式:
X = wrcoef2('type',C,S,'wname',N):用指定的小波函数wname进行N尺度重构。当type = 'a'时,仅对信号的低频部分进行重构,此时N可以为0;当type = 'h'(或'v'/'d')时,对信号(水平、垂直、对角)的高频进行重构,N为严格正整数。

(3)wthcoef2函数
该函数用于对二维信号的小波系数阈值进行处理,常用调用格式:
NC = wthcoef2('type',C,S,N,T,SORH):返回经过小波分解结构[C,S]进行处理后的新的小波分解向量NC,[NC,S]即构成一个新的小波分解结构。N是一个包含高频尺度的向量,T是相应的阈值,且N和T长度须相等。返回'type'(水平、垂直、对角线)方向的小波分解向量NC。参数SORH用来对阈值方式进行选择,当SORH = 's'时,为软阈值,当SORH = 'h'时,为硬阈值。

小波去噪Matlab实例
clear all;
load facets;
subplot(2,2,1);image(X);
colormap(map);
xlabel('(a)原始图像');
axis square
%产生含噪声图像
init = 2055615866;
randn('seed',init);
x = X + 50*randn(size(X));
subplot(2,2,2);image(x);
colormap(map);
xlabel('(b)含噪声图像');
axis square
%下面进行图像的去噪处理
%用小波函数coif3对x进行2层小波分解
[c,s] = wavedec2(x,2,'coif3');
%提取小波分解中第一层的低频图像,即实现了低通滤波去噪
%设置尺度向量
n = [1,2];
%设置阈值向量p
p = [10.12,23.28];
%对三个方向高频系数进行阈值处理
nc = wthcoef2('h',c,s,n,p,'s');
nc = wthcoef2('v',nc,s,n,p,'s');
nc = wthcoef2('d',nc,s,n,p,'s');
%对新的小波分解结构[c,s]进行重构
x1 = waverec2(nc,s,'coif3');
subplot(2,2,3);image(x1);
colormap(map);
xlabel('(c)第一次去噪图像');
axis square
%对nc再次进行滤波去噪
xx = wthcoef2('v',nc,s,n,p,'s');
x2 = waverec2(xx,s,'coif3');
subplot(2,2,4);image(x2);
colormap(map);
xlabel('(d)第二次去噪图像');
axis square
由于例子简单,处理效果一般,但可以明显地看出高频噪声得到了抑制

图像去噪算法综述

阅读数 3801

没有更多推荐了,返回首页