2019-07-02 20:57:49 qq_37486501 阅读数 1044

噪声分类:

  • 高斯噪声
  1. 是随机噪声, 服从高斯分布
  2. 主要特点表现为:麻点
  • 椒盐噪声
  1. 胡椒噪声、盐噪声
  2. 主要特点表现为:黑白点

噪声的描述

  1. 均方误差 MSE : MSE越大,失真率越大
  2. 峰值信噪比 PSNR: PSNR越大,失真度越小

图像平滑(去噪)

  1. 平滑的目的: 在表刘源是图像基本特征的前提下, 消除或衰减噪声的影响, 提高视觉效果

  2. 基础知识:
    (1): 滤波: 使用空间模版(滤波器)处理图像的过程
    (2): 模版与模版运算: 模版和邻域大小相同

  3. 常用图像平滑方法(空间平滑滤波):

  • 均值滤波 (邻域平均法)——线性空间滤波
    MATLAB实现均值滤波,见我的博客:
    https://blog.csdn.net/qq_37486501/article/details/80274928
    (1): 基本思想: 某像素点灰度值=邻域中所有像素灰度值平均值 来代替
    (2): 优点: 在一定程度上可衰减噪声影响——拉小灰度差异
    (3): 缺点: 图像的边缘轮廓细节变模糊——边缘轮廓也做均值,导致的变模糊

  • 中值滤波(中位数)——非线性滤波
    MATLAB实现中值滤波,见我的博客:
    https://blog.csdn.net/qq_37486501/article/details/80274960
    (1): 基本思想: 某像素的灰度值=窗口内所有像素的灰度中值 来代替
    (2):窗口:
    有不同形状(
    一维:线状
    二维:十字、正方形、菱形、圆形)
    有不同大小(窗口大小中必含奇数元素, 为了保证中心像素值)
    (3): 优点:
    在去噪同时,较好的保持边缘轮廓细节
    适合处理椒盐噪声(因为: 不是去噪声点, 而使改变其灰度值)

  • 小波去噪
    将信号通过小波变换(采用Mallat算法)后,信号产生的小波系数含有信号的重要信息,将信号经小波分解后小波系数较大,噪声的小波系数较小,并且噪声的小波系数要小于信号的小波系数,通过选取一个合适的阀值,大于阀值的小波系数被认为是有信号产生的,应予以保留,小于阀值的则认为是噪声产生的,置为零从而达到去噪的目的。

  • 高斯滤波
    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

  • 双边滤波器去噪
    双边滤波器(Bilateral filter)是一种可以保边去噪的滤波器。可以滤除图像数据中的噪声,且还会保留住图像的边缘、纹理等(因噪声是高频信号,边缘、纹理也是高频信息,高斯滤波会在滤除噪声的同时使得边缘模糊)。是使用一个卷积核(模板矩阵),叠加到待处理像素点上,使用对应邻域像素点的加权求和来作为新的输出像素点的值一种方法,简单来说,双边滤波和高斯滤波一样,不同只在于模板矩阵的不同。

2015-05-11 14:15:49 w12345_ww 阅读数 2135

OpenCV有很多方面的应用,作为主流的计算机图像处理编程软件,图像处理和计算机视觉是OpenCV应用最为重要的两个方面,在之前的博文里,我们介绍了OpenCV中的CvMat、IplImage等结构,了解了结构的数据类型的构成,接下来,我们将做些更复杂的图像处理工作。这篇博文将重点介绍图像处理中比较重要的一个前期基础工作-平滑处理。

平滑处理

平滑处理”也称作模糊处理,也叫滤波,是一项简单且使用频率很高的图像处理方法。平滑处理的用途有很多,但最为常见的就是用来减少图像上的噪声和失真。同时,在降低图像的分辨率时,平滑处理也是很重要的。在OpenCV中这个平滑处理的主要工作是由函数cvSmooth()完成的。

void cvSmooth(
    const CvArr* src,//输入图像
    CvArr*       dst,//输出图像
    //param1,2,3,4的值的选择依据smoothtype
    int          smoothtype=CV_GAUSSIAN,
    int          param1=3,
    int          param2=0,
    double       param3=0,
    double       param4=0
)

关于smoothtype的取值,大家可以参照下下图:

这里写图片描述

这个函数调用的示例也很简单,在这里就不传了。

均值滤波(Blur)的缺点在于它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
中值滤波是将中心像素的正方形领域内的每个像素用中间值替换。可改善简单模糊的缺点。
高斯滤波,它使用于真实图像在空间内像素变化缓慢,邻近点的像素变化不会很明显,但是随即两个点就可能形成很大的像素差,正是基于这一点,高斯滤波在保留信号的条件下减少噪声,但该方法在边缘就无效了,会磨平边缘。
双边滤波,因为某些滤波器不仅会消除噪声,还会连同边缘一起磨掉,而双边滤波则可以在一定程度上避免这种滤波,但会很慢。

双边滤波与高斯滤波类似,对相似的像素赋予较高的权重,不相似的基于较低权重,分两部分,第一部分与高斯相同,第二部分也属于高斯加权,但不是基于空间距离,而是基于其他像素与中心像素的灰度差加权。可用于图像分割。

关于各个滤波的数学理论,大家感兴趣的可以参照如下这篇博文,特给出博文链接:

http://blog.csdn.net/xw20084898/article/details/21822565

2019-10-24 21:51:50 wujuxKkoolerter 阅读数 70

01-图像降噪-平滑滤波-模板操作

1 模板操作

模板操作实现一种邻域运算,即某个像素点的结果不仅和本图像的灰度有关,而且和其邻域点的值有关。模板运算在数学上其实就是卷积运算。卷积处理的过程如下:

在这里插入图片描述
卷积运算中的卷积核就是模板运算中的模板,卷积就是做加权求和的过程。邻域中的每个像素分别与卷积核中的每一个元素相乘,乘积求和所得结果即为中心像素的新值。卷积核中的元素称作加权系数(亦称为卷积系数),改变卷积核中的加权系数会影响到总和的数值与符号,从而影响到所求像素的新值。

2 掩模消噪法

掩模消噪法可以用于消除随机噪声,是一种常用的线性低通滤波器,也称为均值滤波器。常见的模板有:

$
H_1 = \frac{1}{10} \begin{bmatrix}
1 & 1 & 1 \
1 & 2 & 1 \
1 & 1 & 1
\end{bmatrix}
$,
$
H_2 = \frac{1}{16} \begin{bmatrix}
1 & 2 & 1 \
2 & 4 & 2 \
1 & 2 & 1
\end{bmatrix}
$,
$
H_3 = \frac{1}{8} \begin{bmatrix}
1 & 1 & 1 \
1 & 0 & 1 \
1 & 1 & 1
\end{bmatrix}
$

如果模板的作用域越大,平滑作用就越明显,图像越模糊。

Python实现的代码如下:

import numpy as np
import scipy.signal as signal
%matplotlib inline
import matplotlib.pyplot as plt
import imageio
def convolve2d(img,fil,mode = 'same'):                #分别提取三个通道
    
    if mode == 'fill':
        h = fil.shape[0] // 2
        w = fil.shape[1] // 2
        img = np.pad(img, ((h, h), (w, w),(0, 0)), 'constant')
    conv_b = _convolve2d(img[:,:,0],fil)              #然后去进行卷积操作
    conv_g = _convolve2d(img[:,:,1],fil)
    conv_r = _convolve2d(img[:,:,2],fil)

    dstack = np.dstack([conv_b,conv_g,conv_r])      #将卷积后的三个通道合并
    return dstack                                   #返回卷积后的结果

def _convolve2d(img,fil):         
    
    fil_heigh = fil.shape[0]                        #获取卷积核(滤波)的高度
    fil_width = fil.shape[1]                        #获取卷积核(滤波)的宽度
    
    conv_heigh = img.shape[0] - fil.shape[0] + 1    #确定卷积结果的大小
    conv_width = img.shape[1] - fil.shape[1] + 1

    conv = np.zeros((conv_heigh,conv_width),dtype = 'uint8')
    
    for i in range(conv_heigh):
        for j in range(conv_width):                 #逐点相乘并求和得到每一个点
            conv[i][j] = wise_element_sum(img[i:i + fil_heigh,j:j + fil_width ],fil)
    return conv
    
def wise_element_sum(img,fil):
    res = (img * fil).sum() 
    if(res < 0):
        res = 0
    elif res > 255:
        res  = 255
    return res
src = imageio.imread('../../../../resources/images/f1.jpg')
kernel = np.array([[1.0,1.0,1.0],[1.0,2.0,1.0],[1.0,1.0,1.0]]) / 10.0

result = convolve2d(src,kernel,'fill')

原图像

plt.imshow(src)

在这里插入图片描述

程序运行结果

plt.imshow(result)

在这里插入图片描述

2019-05-10 16:11:06 weixin_42764060 阅读数 281

空间域增强—图像平滑

图像平滑也成为图像去噪,是为了抑制图像噪声改善图像质量进行的处理。这种噪声可能是在图像获取和传输过程中造成的,噪声会使图像恶化、质量下降、图像模糊、特征淹没,对图像的分析很不利。

邻域平均法

这种方法直接在空间域上进行平滑处理

思想:假设图像由许多灰度恒定的小块组成,相邻的像素之间存在很高的空间相关性,而噪声则是统计独立的。所以可以用邻域内各像素的灰度平均值代替像素原来的灰度值,实现图像的平滑。
在这里插入图片描述
所以,邻域平均法是把当前像素邻域内各像素的灰度平均值作为像素输出值,用这种方法进行图像去噪。
在这里插入图片描述
在这里插入图片描述
邻域平均法的优点:算法简单
邻域平均法的缺点:会使图像产生模糊,特别实在边缘和细节处。而且邻域越大,去噪能力增强的同时,模糊的程度越严重。
在这里插入图片描述
为了克服简单局部平均法的缺点,目前提出了很多保边缘、细节的局部平滑算法。

超限像素平滑法

在这里插入图片描述
在这里插入图片描述
同局部平滑法相比,超限像素平滑法去椒盐噪声的效果更好,而且可以保护有微小灰度差的细节和纹理。

有选择保边缘平滑法

图像掩模的概念:
图像掩模 。释文: 用选定的图像、图形或物体,对待处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。用于覆盖的特定图像或物体称为掩模或模板。光学图像处理中,掩模可以是胶片、滤光片等。数字图像处理中,掩模为二维矩阵数组,有时也用多值图像。数字图像处理中,图像掩模主要用于:①提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。②屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。③结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。④特殊形状图像的制作
在这里插入图片描述
这种方法用方差来测度区域的灰度均匀特性。如果区域中含有尖锐的边缘,它的灰度方差就会很大,如果不含边缘或灰度均匀的区域,方差就小,所以最小方差所对应的区域就是灰度最均匀区域。 这种平滑方法既能消除噪音,又不会破坏区域边界的细节。
在这里插入图片描述
在这里插入图片描述

中值滤波法

在这里插入图片描述
这种方法对脉冲干扰及椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效地保护边缘少受模糊。但它对点、线等细节较多的图像却不太适合

中值滤波法最重要的环节:

选择窗口尺寸的大小,通常很难事先就确定出最佳的窗口尺寸,需要通过从小窗口到大窗口的中值滤波试验,再从中选取最合适尺寸的窗口。

在这里插入图片描述
通过上图中原图像和经过中值滤波图像可以看出,对于离散的阶跃信号(如第一个图),斜升信号(如第二个图),离散的信号没有受到影响;如果是离散三角信号,经过中值滤波以后顶部就变平了(如最后一个图),对于离散的脉冲信号(如图三、图四),对于信号中连续出现的那部分小于窗口尺寸的一般时,将会被抑制掉,否则将不受影响。

在这里插入图片描述
在这里插入图片描述
中值滤波法比邻域、超限像素平均法更为有效!

2020-01-18 09:42:29 qq_36758914 阅读数 26

图像降噪(平滑)

介绍

图像降噪的英文名称是Image Denoising, 是图像处理中的专业术语。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。减少数字图像中噪声的过程称为图像降噪,有时候又称为图像去噪。

代码实现

首先,导入带噪音的图片。

img = cv2.imread('lenaNoise.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

在这里插入图片描述

# 均值滤波
# 用3*3的核对图片进行卷积操作,核上的参数都是1/9,达到均值的效果
blur = cv2.blur(img, (3, 3))
# 方框滤波(归一化)=均值滤波
box1 = cv2.boxFilter(img, -1, (3, 3), normalize=True)
# 方框滤波(不归一化)
box2 = cv2.boxFilter(img, -1, (3, 3), normalize=False)
# 高斯滤波
# 用5*5的核进行卷积操作,但核上离中心像素近的参数大。
guassian = cv2.GaussianBlur(img, (5, 5), 1)
# 中值滤波
# 将某像素点周围5*5的像素点提取出来,排序,取中值写入此像素点。
mean = cv2.medianBlur(img, 5)

# 展示效果
titles = ['Original figure', 'blur', 'box_norm', 'box_no_norm', 'guassian', 'mean']
images = [img, blur, box1, box2, guassian, mean]
for i in range(6):
    plt.subplot(2, 3, i+1), plt.imshow(images[i])
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

最终得到:
在这里插入图片描述

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