图像处理之高斯滤波

news/2024/11/22 17:06:45/

文章目录

  • 高斯函数
    • 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()

高斯滤波

高斯滤波常用尺寸为 5x5,σ=1.4 的高斯滤波器。下面是 5x5 高斯滤波器的实现代码:

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 - 3) + np.square(j - 3))) / (2 * math.pi * sigma * sigma)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(noiseImg)
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上代码


http://www.ppmy.cn/news/866619.html

相关文章

交换:交换机相关技术(二层技术)

目录 VLAN&#xff1a;虚拟局域网 VLAN种类&#xff1a; 接口分配链路类型 接口划分VLAN 跨网段的通讯 VLAN&#xff1a;虚拟局域网 LAN &#xff1a;局域网 MAN&#xff1a;城域网 WAN&#xff1a;广域网 1.一个VLAN相当于一个广播域 VLAN&#xff1a;通过路由器和交换机…

计算机肉机,一种全自动计算机数控绞肉机

主权项&#xff1a; 1.一种全自动计算机数控绞肉机&#xff0c;包括绞肉机基座、清洗系统和输送系统&#xff0c;其特征在于&#xff1a;所述输送系统与所述绞肉机基座相连&#xff0c;所述清洗系统设置在所述输送系统上方&#xff0c;所述绞肉机基座包括基座结构架、数控操作台…

三轴自动锁螺丝机程序PLC做配方吸钉式自动锁螺丝机

三轴自动锁螺丝机程序PLC做配方吸钉式自动锁螺丝机 可以直接装机使用,电批用奇力速或者HOIS 显控触摸屏加三菱FX3GA或者FX3U 已经在设备上使用。 用PLC做的配方&#xff08;变址寄存器)&#xff0c;打螺丝颗数自由设定&#xff0c;可以修改程序调整颗数和配方数。 支持示教…

主轴承盖螺栓拧紧机PLC控制程序

HMI为西门子TP900触摸屏&#xff0c;支持屏幕触摸和按键操作 设备主要参数 设备外形尺寸&#xff1a;长*宽*高 2180*1900*2500mm 生产节拍&#xff1a; 55 S 电源电压&#xff1a; AC380V5%&#xff0c;50HZ&#xff0c;三相五线制 系统组态 常见故障处理 气缸报警 报警原…

猪肉价格暴涨引发的事件

说&#xff1a;“保证老百姓吃得上猪肉。” 猪肉价格接着涨 南方都市报报道&#xff1a;深圳市政府承认深圳存在炒猪肉团&#xff0c;规模甚至超过炒房团。 猪肉价格接着涨 网友评选新四座大山&#xff1a;高房价、高学费、高医疗费、高猪肉价 猪肉价格接着涨 中国青年报…

冷饮的价格

题目描述暑假来了&#xff0c;天气特别热&#xff0c;花花到冷饮店来买冷饮&#xff1b;已知雪糕2.5元/支&#xff0c;碎碎冰1.5元/支&#xff0c;花花买了x支雪糕和y支碎碎冰&#xff0c;老板说今天有优惠&#xff0c;可以有1支雪糕免费&#xff0c;请问花花应该付给老板多少钱…

2021年中国速冻水饺行业现状分析:“宅经济”推动速冻水饺销售增加[图]

一、速冻水饺产业链 速冻水饺是将包好的饺子经过速冻以达到冷藏&#xff0c;可以随时食用的一种食物。饺子是受中国汉族人民喜爱的传统特色食品&#xff0c;是每年春节必吃的年节食品。 速冻水饺产业链 资料来源&#xff1a;智研咨询整理 二、速冻水饺产量及需求量 伴随着生…

Java中Map使用增强for循环和迭代器获取key和value

加油&#xff0c;新时代打工人&#xff01; java中List集合三种获取集合元素方式 本文运行代码使用 jdk1.8 for 语句比较简单&#xff0c;用于循环数据。 Java迭代器&#xff08;Iterator&#xff09;是 Java 集合框架中的一种机制&#xff0c;是一种用于遍历集合&#xff08…