图像处理之高斯滤波

文章目录

  • 高斯函数
    • 1.一维高斯函数
    • 2. 二维高斯函数
  • 高斯滤波
    • 1.高斯核生成
    • 2.滤波过程

高斯函数

高斯函数广泛应用于统计学领域,用于表述正态分布,在信号处理领域,用于定义高斯滤波器,在图像处理领域,二维高斯核函数常用于高斯模糊Gaussian Blur,在数学领域,主要是用于解决热力方程和扩散方程,以及定义Weiertrass Transform。

1.一维高斯函数

高斯函数,Gaussian Function, 也简称为Gaussian,一维形式如下:
f ( x ) = a e − ( x − b ) 2 2 c 2 f(x)=ae^{- \frac{(x-b)^2}{2c^2}} f(x)=ae2c2(xb)2
函数图像如下:
一维高斯图像
其中

  • a a a表示曲线高度;
  • b ( μ ) b(\mu) b(μ)表示曲线在 x x x轴的中心;
  • c ( σ ) c(\sigma) c(σ)表示半峰宽度有关;

2. 二维高斯函数

二维高斯函数在计算机视觉领域用处广泛,利用0均值的二维高斯函数,可以生成高斯卷积核,用于图像处理中的高斯滤波,实现高斯模糊,可以去除噪声。
公式如下:
G ( x , y ) = 1 2 π σ 2 e − ( x 2 + y 2 ) 2 σ 2 G(x,y)=\frac{1}{2\pi\sigma^2}e^{-\frac{(x^2+y^2)}{2\sigma^2}} G(x,y)=2πσ21e2σ2(x2+y2)
三维立体图:
在这里插入图片描述
等高线图:
在这里插入图片描述
画图代码如下:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 定义二维高斯函数
def Gaussian(x, y, x0, y0, sigma):return np.exp(-((x - x0)**2 + (y - y0)**2) / (2.0 * sigma**2))# 设置参数
sigma = 2
x, y = np.meshgrid(np.linspace(-5, 5), np.linspace(-5, 5))# 计算高斯函数
z = Gaussian(x, y, 0, 0, sigma)# 绘制3D图形
fig = plt.figure()
ax = Axes3D(fig)#plt.get("可选参数如下"),可故意写错,报错可以提醒正确的配色
# 'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 'Oranges', 'Oranges_r', 'PRGn', 'PRGn_r', 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r', 'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3', 'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot', 'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r', 'bwr', 'bwr_r', 'cividis', 'cividis_r', 'cool', 'cool_r', 'coolwarm', 'coolwarm_r', 'copper', 'copper_r', 'cubehelix', 'cubehelix_r', 'flag', 'flag_r', 'gist_earth', 'gist_earth_r', 'gist_gray', 'gist_gray_r', 'gist_heat', 'gist_heat_r', 'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 'gist_stern', 'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r', 'gnuplot_r', 'gray', 'gray_r', 'hot', 'hot_r', 'hsv', 'hsv_r', 'inferno', 'inferno_r', 'jet', 'jet_r', 'magma', 'magma_r', 'nipy_spectral', 'nipy_spectral_r', 'ocean', 'ocean_r', 'pink', 'pink_r', 'plasma', 'plasma_r', 'prism', 'prism_r', 'rainbow', 'rainbow_r', 'seismic', 'seismic_r', 'spring', 'spring_r', 'summer', 'summer_r', 'tab10', 'tab10_r', 'tab20', 'tab20_r', 'tab20b', 'tab20b_r', 'tab20c', 'tab20c_r', 'terrain', 'terrain_r', 'turbo', 'turbo_r', 'twilight', 'twilight_r', 'twilight_shifted', 'twilight_shifted_r', 'viridis', 'viridis_r', 'winter', 'winter_r'
ax.plot_surface(x, y, z, rstride=2, cstride=2, cmap=plt.get_cmap('BuGn'))
plt.savefig('gaussianFunction.jpg')
plt.show()# 绘制等高线图形
plt.contourf(x, y, z, 10, cmap=plt.get_cmap('PuOr'))
plt.savefig('gaussianContourf.jpg')
plt.show()

高斯滤波

1.高斯核生成

若要生成 ( 2 k + 1 ) ∗ ( 2 k + 1 ) (2k+1)*(2k+1) (2k+1)(2k+1)大小的高斯核,生成公式如下:
G [ i , j ] = 1 2 π σ 2 e − ( ( x − k − 1 ) 2 + ( y − k − 1 ) 2 ) 2 σ 2 G[i,j]=\frac{1}{2\pi\sigma^2}e^{-\frac{((x-k-1)^2+(y-k-1)^2)}{2\sigma^2}} G[i,j]=2πσ21e2σ2((xk1)2+(yk1)2)
其中 σ x = σ y = σ \sigma_x=\sigma_y=\sigma σx=σy=σ
G h [ i , j ] = G [ i , j ] s u m G ( 归一化 ) G_h[i,j]=\frac{G[i,j]}{sumG} (归一化) Gh[i,j]=sumGG[i,j](归一化)
其中 s u m G sumG sumG G [ i , j ] G[i,j] G[i,j]的和

2.滤波过程

在这里插入图片描述
图片来自于这里

下面是 5x5 ,σ=25高斯滤波器的实现代码:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import math
import cv2
import imgShow as iS
import random
# 去除噪音 - 使用 5x5 的高斯滤波器
def gaussianSmooth(img_gray):# 1.生成高斯滤波器/高斯核"""要生成一个 (2k+1)x(2k+1)的高斯滤波器,滤波器的各个元素计算公式如下:2*k+1=5,k=2,H[i, j] = (1/(2\*pi\*sigma\*\*2))\*exp(-1/2\*sigma\*\*2((i-k-1)\*\*2 + (j-k-1)\*\*2))"""sigma = 25gau_sum = 0gaussian = np.zeros([5, 5])for i in range(5):for j in range(5):gaussian[i, j] = math.exp((-1 / (2 * sigma * sigma)) * (np.square(i - 2) + np.square(j - 2)))gau_sum = gau_sum + gaussian[i, j]# 2.高斯滤波器归一化处理gaussian = gaussian / gau_sumprint(gaussian)# 3.高斯滤波W, H = img_gray.shapenew_gray = np.zeros([W , H])for i in range(W):for j in range(H):if(i<W-5 and j<H-5):new_gray[i,j] = np.sum(img_gray[i:i + 5, j:j + 5] * gaussian)else:new_gray[i,j] =img_gray[i,j]return new_graydef gauss_noise(img, mean=0, sigma=25):image = np.array(img / 255, dtype=float)  # 将原始图像的像素值进行归一化# 创建一个均值为mean,方差为sigma,呈高斯分布的图像矩阵noise = np.random.normal(mean, sigma / 255.0, image.shape)out = image + noise  # 将噪声和原始图像进行相加得到加噪后的图像res_img = np.clip(out, 0.0, 1.0)res_img = np.uint8(res_img * 255.0)return res_imgimg = cv2.imread('PeppersRGB.tif')
grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
noiseImg=gauss_noise(grayImg)
smoothImg = gaussianSmooth(grayImg)
iS.showImagegray(smoothImg, noiseImg, 25, 15, 'smoothImg', 'origin', './GaussianSmooth.jpg')
GaussianBlur_opencv=cv2.GaussianBlur(noiseImg,(5,5),25)
iS.showImagegray(GaussianBlur_opencv,noiseImg , 25, 15, 'GaussianBlur_opencv', 'origin', './GaussianSmooth_Opencv.jpg')

高斯核(归一化)显示结果
在这里插入图片描述

显示子图代码如下:

import matplotlib.pyplot as plt
#图像实际大小为 W*100 * H*100 像素  ,
def showImagegray(newImg,oldImg,W,H,newImgtitle,oldImgtitle,saveImgpath):plt.figure(figsize=(W,H))plt.subplot(121)plt.title(oldImgtitle,fontsize=30)plt.axis('off')plt.imshow(oldImg, cmap='gray')plt.subplot(122)plt.title(newImgtitle,fontsize=30)plt.axis('off')plt.imshow(newImg, cmap='gray')# plt.tight_layout()  # 调整整体空白plt.savefig(saveImgpath)plt.show()

代码效果如下:

在这里插入图片描述
在这里插入图片描述

点击这里整体代码可见github上代码
Opencv实现高斯滤波

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21548.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.5 纹理

这次笔记时间有点久&#xff0c;主要是这节课讲的东西需要很多基础来铺垫&#xff0c;看完了后感觉缺失信息很多&#xff0c;又去补了GAMES 101 3~10节内容。 强烈建议看不懂的先去学习GMAES101 网址Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)_哔哩哔哩_bi…

APP开发中的数据安全:你需要知道的一切

APP开发中的数据安全&#xff0c;是指 APP开发过程中&#xff0c;所有的数据都会经过严格的安全处理。因为目前 APP开发公司的技术、资质良莠不齐&#xff0c;很多企业在开发过程中不注重对数据安全的保护。 在如今大数据时代&#xff0c; APP开发过程中&#xff0c;会产生大量…

unidbg或者java层解密方法IDEA中打包成jar包供python调用方法

一、导出jar包方法 &#xff08;1&#xff09;配置jar包参数 &#xff08;2&#xff09;创建生成jar包 成功生成&#xff01; 二、Python代码调用 import jpypejvmPath jpype.getDefaultJVMPath() d unidbg-android.jar # 对应jar地址 jpype.startJVM(jvmPath, "-ea&q…

Docker 运行花生壳实现内外网穿透

Docker 运行花生壳实现内外网穿透 1、docker安装centos2、进入centos容器安装花生壳客户端3、花生壳绑定设备4、测试外网穿透 1、docker安装centos 使用命令行安装centos7 docker run --privilegedtrue --restartalways -e TZ"Asia/Shanghai" -d --nethost --nam…

vue生命周期四个阶段(created和mount)

1.四个阶段 1&#xff09;必经阶段 2&#xff09;非必经阶段 提示&#xff1a;主动调用 vm.$destroy() 函数销毁后&#xff0c;可用 vm.$mount("#app") 将断开的 new Vue() 和页面重新建立虚拟 DOM 树&#xff0c;重新绑定起来挂载界面。 2. 生命周期钩子函数&…

利用python绘制二三维曲面和矢量流线图

为了实现不同数据的可视化&#xff0c;最近研究了python环境下的可视化方案&#xff0c;为后续的流体运动仿真模拟做好储备&#xff0c;由于python处理数据的便利性&#xff0c;导致目前很多后端处理或者可视化成图操作都在python中实现&#xff0c;比如前端是vue&#xff0c;加…

2023-07-11力扣每日一题

链接&#xff1a; https://leetcode.cn/problems/maximum-alternating-subsequence-sum/ 题意&#xff1a; 给定一个数组&#xff0c;求一个子序列&#xff0c;使这个子序列的奇数位和-偶数位和最大&#xff08;下标从1开始的话|反正第一个数是&#xff09; 解&#xff1a;…

抽象的计算机模型——图灵机之一发入魂

图灵机由英国数学家和计算机科学家阿兰图灵&#xff08;Alan Turing&#xff09;于1936年提出。它是一种抽象的计算设备&#xff0c;是一种理论上的计算模型&#xff0c;用于描述和模拟计算的过程&#xff0c;至于为什么要做计算可参考我另外一篇文章。可以说&#xff0c;图灵机…

什么是vlan为什么要划分vlan

首先了解交换机的数据的转发方式。&#xff0c;有两种情况会使用广播方式进行数据分发&#xff0c;第一种就是目的地址是全F的&#xff08;FF-FF-FF-FF-FF-FF&#xff09;&#xff0c;第二种是位置的单播帧&#xff0c;这样的情况下会带来什么杨的问题呢。 场景引入&#xff1…

GitLab CICD Day 08 - 环境变量

1.局部/全局环境变量 stages:- testing # stage编排- build- deployvariables:global_var: "全部变量" #全部变量build_image:stage: buildvariables: #局部环境变量my_name: "局部环境变量" tags:- shell script:- …

JavaScript--事件处理高级应用

1、什么是事件 指在特定条件下触发的操作或响应。事件可以是用户与网页交互时引起的动作&#xff0c;例如点击按钮、提交表单、鼠标移动等&#xff0c;也可以是由浏览器或其他代码触发的动作&#xff0c;如页面加载完成、时间到达等。 我们可以通过添加事件处理程序来响应各种…

tomcat学习随笔

Tomcat结构与原理 一、组成ServerServiceConnectorProtocolHandlerEndpointProcessor Adaptor ContainerEngineHostContextWrapper 运行热部署jsp类war tomcat根路径目录结构示意图 一、组成 tomcat结构debug示意图 Server tomcat的实例&#xff0c;支持多个Service Service …