• 图像运算和图像增强七


    图像运算和图像增强七

    图像平滑之均值滤波、方框滤波、高斯滤波

    (1)图形平滑

    图像平滑是一项简单且使用频率很高的图像处理方法,可以用来压制、弱化或消除图像中的细节、突变、边缘和噪声,最常见的是用来减少图像上的噪声。
    噪声滤除算法多种多样,可以从设计方法上分为线性滤波算法和非线性滤波算法两大类。

    线性滤波

    在图像处理中,对邻域中的像素的计算为线性运算时,如利用窗口函数进行平滑加权求和的运算,或者某种卷积运算,都可以称为线性滤波。

    非线性滤波

    非线性滤波利用原始图像跟模版之间的一种逻辑关系得到结果,如中值滤波、双边滤波等。非线性滤波技术从某种程度上弥补了线性滤波方法的不足,由于它能够在滤除噪声的同时较好地保持图像信号的高频细节,从而得到广泛的应用。
    常见的图像平滑算法
    在这里插入图片描述
    在这里插入图片描述
    (2)均值滤波
    均值滤波是最简单的一种线性滤波算法,均值滤波输出图像的每一个像素值是其周围MxM个像素值的加权平均值(不包括目标像素点),调用OpenCV中的cv2.blur()函数实现均值滤波处理。
    在这里插入图片描述

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    #读取图片
    img=cv2.imread('lena-zs.png')
    source=cv2.cvtColor(img,cv2,COLOR_BGR2RGB)
    #均值滤波
    result=cv2.blur(source,(3,3))
    #用来正常显示中文标签
    plt.rcParams['font.sans-serif']=['SimHei']
    #显示图形
    title=['原始图像’,'均值滤波']
    images=[source,result]
    for i in range(2):
    	plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
    	plt.title(titles[i])
    	plt.xticks([]),plt,yticks([])
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    如果图像中的噪声仍然存在,可以增加模糊内核的大小,比如使用5x5,10x10的,但是处理后的图像会逐渐变得更加模糊。(下图为10x10的图像)

    在这里插入图片描述
    图像均值滤波是通过模糊内核对图像进行平滑处理,由于模糊内核中的每个权重值都相同,故称为均值。该方法在一定程度上消除了原始图像中的噪声,降低了原始图像的对比度,但也存在一定缺陷,它在降低噪声的同时使图像变得模糊,尤其是边缘和细节处,而且模糊内核越大,模糊程度越严重。
    (3)方框滤波
    方框滤波又称为盒式滤波,它利用卷积运算对图像邻域的像素值进行平均处理,从而实现消除图像中的噪声。方框滤波和和均值滤波的模糊内核基本一样,区别为是否需要进行均一化处理(归一化就是把要处理的像素值都缩放到一个范围内,以便统一处理和直观量化)。调用OpenCV中的cv2.boxFilter()函数实现方框滤波处理。

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    #读取图片
    img=cv2.imread('lena-zs.png')
    source=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    #方框滤波
    result=cv2.boxFilter(sourcr,-1,(3,3),normalize=1)
    #用来正常显示中文标签
    plt.rcParams['font.sans-serif']=['SimHei']
    #显示图形
    titles=['原始图像','方框滤波']
    images=[source,result]
    for i in range(2):
    	plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
    	plt.title(titles[i])
    	plt.xticks([]),plt.yticks([])
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述
    (4)高斯滤波
    为了克服局部平均法造成图像模糊的弊端,又提出了一些保持边缘细节的局部平滑算法,图像高斯滤波(高斯平滑)就是这样一种算法。它是应用邻域平均思想对图像进行平滑的一种线性平滑滤波,对于抑制服从正态分布的噪声非常有效,适用于消除高斯噪声,被广泛应用于图像处理的减噪过程。
    通俗地讲,高斯滤波就是
    对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(权重不同)经过加权平均后得到。中 OpenCV 主要调用 GaussianBlur()函数实现高斯平滑处理。
    在这里插入图片描述

    import cv2 
    import numpy as np 
    import matplotlib.pyplot as plt
    #读取图片
    img = cv2.imread('lena-zs.png')
    source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    #高斯滤波
    result = cv2.GaussianBlur(source, (7,7), 0)
    #用来正常显示中文标签
    plt.rcParams['font.sans-serif']=['SimHei']
    #显示图形
    titles = ['原始图像', '高斯滤波'] 
    images = [source, result]
    for i in range(2):
    	plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
    	plt.title(title[i])
    	plt.xticks([]),plt.yticks([])
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述
    高斯滤波作为最有效的滤波器之一,它对于抑制服从正态分布的噪声非常有效。

  • 相关阅读:
    35 | 如何准备测试数据?
    Fanuc发那科数采
    Linux常用命令
    【带头学C++】----- 三、指针章 ---- 3.8二维数组与数组指针的关系(二,补充)
    【Java集合】ArrayList精讲(源码分析)
    基于springboot和ftp实现的网盘文件系统
    spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
    富婆富少都爱看的ACL基本配置及实验详解
    【华为机试真题 Python实现】出错的或电路
    连续/离散的控制系统阶跃测试(包括MATLAB里的step()函数)
  • 原文地址:https://blog.csdn.net/come_closer/article/details/127707517