python+OpenCv笔记(十):高斯滤波

高斯滤波

原理:

二维高斯是构建高斯滤波器的基础。二维高斯的分布是一个凸起的帽子形状,如图所示:

概率分布函数为:\LARGE G(x,y)=\frac{1}{2\pi \sigma _{}^{2}}\cdot e_{}^{-\frac{x_{}^{2}+y_{}^{2}}{2\sigma _{}^{2}}}

这里的σ可以看做两个值,一个是x方向的标准差\large \sigma _{x}^{},一个是y方向的标准差\large \sigma _{y}^{},当\large \sigma _{x}^{}\large \sigma _{y}^{}取值越大,整个形状越趋近于扁平, 当\large \sigma _{x}^{}\large \sigma _{y}^{} 取值越小,整个形状越凸起。

 正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。计算平滑结果时,只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。

应用:

高斯平滑在图像中去除高斯噪声方面非常有效。

流程:

  1. 首先确定权重矩阵
     假定中心点的坐标为(0,0),那么距离它最近的8个点为:
     
      为了计算权重的值,需要设定σ的值,假定σ=1.5,则模糊半径为1的权重矩阵如下:
     
      (例如:对于(-1,1)点,将x=-1,y=1代入\LARGE G(x,y)=\frac{1}{2\pi \sigma _{}^{2}}\cdot e_{}^{-\frac{x_{}^{2}+y_{}^{2}}{2\sigma _{}^{2}}}中得0.0453542)

      这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵

  2. 计算高斯模糊
    假设有9个像素点,灰度值(0-255)如下:    

    每个点乘以对应的权重值:

     得到

    将这9个值加起来,就是中心点的高斯模糊的值。
    对所有点重复这个过程,就得到了高斯模糊后的图像。
    如果原图是彩色图片,可以对RGB三个通道分别做高斯平滑 

OpenCv API:

cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)

参数:

  1. src:输入的图像
  2. ksize:高斯卷积核的大小。注意:卷积核的高度和宽度都应为奇数,且可以不同。
  3. sigmaX:水平方向的标准差
  4. sigmaY:垂直方向的标准差,默认值为0,表示与sigmaX相同
  5. borderType:边界类型
     

代码编写:

import numpy as np
import cv2 as cv
import random
import matplotlib.pyplot as plt

src = cv.imread("E:\\view.jpg")
img = src.copy()

# 调用噪声函数生成高斯噪声图片‘
img_gauss = gasuss_noise(img, mean=0, var=0.01)  # 均值为0,方差为0.01

# 高斯滤波
img_gaussianBlur = cv.GaussianBlur(img_gauss, (3, 3), 1)

# 显示图像
cv.imshow("gauss", img_gauss)
cv.imshow("gaussianBlur", img_gaussianBlur)
cv.waitKey(0)

注:gasuss_noise()函数见文章:
python+OpenCv笔记(八):图像噪声(椒盐噪声、高斯噪声)https://blog.csdn.net/qq_45832961/article/details/122309422

高斯噪声图像:

高斯平滑后:

猜你喜欢

转载自blog.csdn.net/qq_45832961/article/details/122351534
今日推荐