目录

一、导入库

二、读取图片并且转换成灰度图

三、制造一些噪声点

四、编写模板

五、高斯滤波及相关的编写

六、调用函数

七、显示并保存图片

八、完整代码


就不讲它的实现原理了,这里有个我觉得还比较清晰的文章,可以去看

(60条消息) 高斯滤波(Gauss filtering)_半壕春水的博客-CSDN博客

Python里面是有相应的高斯滤波实现库的,但是由于我们的作业要求不能用,所以就自己来实现。

一、导入库

import cv2
import numpy as np
import math
import random

二、读取图片并且转换成灰度图

因为用cv2读取图片的结果好像都是彩色图,所以建议一定要先转换成灰度

# 读取图像
imag = cv2.imread('3.jpg')
imag = cv2.cvtColor(imag, cv2.COLOR_BGR2GRAY)
[a, b] = imag.shape

三、制造一些噪声点

这里我的噪声比较粗糙,是简单的椒盐噪声,喜欢其他的可以改成其他的

# 制造噪声
for i in range(30):x = random.randint(0, a)y = random.randint(0, b)imag[x, y] = 0

四、编写模板

了解滤波的同学都应该知道需要建立一个模板来遍历图像,这里我用的是根据高斯滤波原理中的参数来计算模板的大小,因为希望大部分都在这个范围内,所以用的是(-3,3)

# 计算模板的大小以及模板
def compute(delta):k = round(3 * delta) * 2 + 1print('模的大小为:', k)H = np.zeros((k, k))k1 = (k - 1) / 2for i in range(k):for j in range(k):H[i, j] = (1 / (2 * 3.14 * (delta ** 2))) * math.exp((-(i - k1) ** 2 - (j - k1) ** 2) / (2 * delta ** 2))k3 = [k, H]print(H)print(sum(sum(H)))return k3

五、高斯滤波及相关的编写

# 相关
def relate(a, b, k):n = 0sum1 = np.zeros((k, k))for m in range(k):for n in range(k):sum1[m, n] = a[m, n] * b[m, n]return sum(sum(sum1))# 高斯滤波
def fil(imag, delta=0.7):k3 = compute(delta)k = k3[0]H = k3[1]k1 = (k - 1) / 2[a, b] = imag.shapek1 = int(k1)new1 = np.zeros((k1, b))new2 = np.zeros(((a + (k - 1)), k1))imag1 = np.r_[new1, imag]imag1 = np.r_[imag1, new1]imag1 = np.c_[new2, imag1]imag1 = np.c_[imag1, new2]y = np.zeros((a, b))sum2 = sum(sum(H))for i in range(k1, (k1 + a)):for j in range(k1, (k1 + b)):y[(i - k1), (j - k1)] = relate(imag1[(i - k1):(i + k1 + 1), (j - k1):(j + k1 + 1)], H, k) / sum2return y

六、调用函数

一定要先转换成uint8!不然没有办法显示

# 滤波
imag2 = fil(imag)
imag2 = np.array(imag2, dtype='uint8')

七、显示并保存图片

这里的1.jpg是灰度化后并且加了噪声的图片,2.jpg是最后的结果,你们也可以自己取文件名,而'1','2'是显示的窗口的名字,用于区分就好,你们也可以改成其他的

# 显示并保存图像
cv2.imshow('1', imag)
cv2.imwrite('1.jpg', imag)
cv2.imwrite('2.jpg', imag2)
cv2.imshow("2", imag2)

八、完整代码

注意事项:如果你们要运行我的代码,首先改你保存的图片的路径,还有你想存储的图片名和路径

# filter.py
import cv2
import numpy as np
import math
import random# 计算模板的大小以及模板
def compute(delta):k = round(3 * delta) * 2 + 1print('模的大小为:', k)H = np.zeros((k, k))k1 = (k - 1) / 2for i in range(k):for j in range(k):H[i, j] = (1 / (2 * 3.14 * (delta ** 2))) * math.exp((-(i - k1) ** 2 - (j - k1) ** 2) / (2 * delta ** 2))k3 = [k, H]print(H)print(sum(sum(H)))return k3# 相关
def relate(a, b, k):n = 0sum1 = np.zeros((k, k))for m in range(k):for n in range(k):sum1[m, n] = a[m, n] * b[m, n]return sum(sum(sum1))# 高斯滤波
def fil(imag, delta=0.7):k3 = compute(delta)k = k3[0]H = k3[1]k1 = (k - 1) / 2[a, b] = imag.shapek1 = int(k1)new1 = np.zeros((k1, b))new2 = np.zeros(((a + (k - 1)), k1))imag1 = np.r_[new1, imag]imag1 = np.r_[imag1, new1]imag1 = np.c_[new2, imag1]imag1 = np.c_[imag1, new2]y = np.zeros((a, b))sum2 = sum(sum(H))for i in range(k1, (k1 + a)):for j in range(k1, (k1 + b)):y[(i - k1), (j - k1)] = relate(imag1[(i - k1):(i + k1 + 1), (j - k1):(j + k1 + 1)], H, k) / sum2return y# 读取图像
imag = cv2.imread('3.jpg')
imag = cv2.cvtColor(imag, cv2.COLOR_BGR2GRAY)
[a, b] = imag.shape
# 制造噪声
for i in range(30):x = random.randint(0, a)y = random.randint(0, b)imag[x, y] = 0
# 滤波
imag2 = fil(imag)
imag2 = np.array(imag2, dtype='uint8')# 显示并保存图像
cv2.imshow('1', imag)
cv2.imwrite('1.jpg', imag)
cv2.imwrite('2.jpg', imag2)
cv2.imshow("2", imag2)

Python实现高斯滤波相关推荐

  1. 高斯滤波详解 python实现高斯滤波

    一. 高斯滤波 高斯滤波是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用.在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声. ...

  2. python数据处理高斯滤波_十大点云数据处理技术梳理

    研究点云数据时,感觉无从下手? 看看这十大点云数据处理技术,换个思路学点云. 点云 · 定义 简言之,在获取物体表面每个采样点的空间坐标后,得到的是一个点的集合,称之为"点云".包 ...

  3. python opencv高斯滤波_【OpenCV】基于Python的图像高斯平滑和椒盐噪声处理 | 学步园...

    最近要做一个Project,是使用TV来对添加了Gaussian和Salt&Pepper噪声的图像进行恢复,前期的任务是生成噪声污染的图像. 噪声图像的生成采用对图像进行高斯平滑,之后在随机的 ...

  4. Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波

    作者 | 杨秀璋,责编 | 夕颜 题图  | 视觉中国 出品 | CSDN博客 本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波.全文均是 ...

  5. python 双边滤波与高斯滤波

    双边滤波速度不是特别快 python 双边滤波与高斯滤波 高斯滤波就是对整幅图像进行加权平均的过程.每个像素点的值,都由其本身和邻域内的其它像素值经过加权平均后得到.高斯滤波的详细操作是:用一个模板( ...

  6. python一维平滑滤波_高斯滤波器的原理及其实现过程(附模板代码)

    本文主要介绍了高斯滤波器的原理及其实现过程高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像.其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出.其窗口模板的系数和均值滤波器不同 ...

  7. [Python图像处理] 四十一.Python图像平滑万字详解(均值滤波、方框滤波、高斯滤波、中值滤波、双边滤波)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  8. [Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. python设计---空域增强之图片去噪(中值滤波、均值滤波、高斯滤波、双边滤波)

    空域增强之图片去噪 引言 中值滤波及均值滤波 中值滤波 理论方法 均值滤波 中值滤波和均值滤波的对比 程序 高斯滤波 程序 双边滤波 程序 ui界面 设计程序 后续 引言 我们在日常工作生活中,总是需 ...

  10. [Python从零到壹] 五十五.图像增强及运算篇之图像平滑(均值滤波、方框滤波、高斯滤波)

    又是一年1024,首先,祝大家节日快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界 ...

最新文章

  1. python广告刷量_Python一日一练05----怒刷点击量
  2. Codeforces Round #181 (Div. 2) C. Beautiful Numbers 排列组合 暴力
  3. 「SAP技术」SAP MM MB5M报表不显示特殊库存数据
  4. 同一张表两方各字段相同_SQL高级知识——派生表
  5. 线性表及其逻辑和存储结构(二级)
  6. c++学习书籍推荐《超越C++标准库:Boost库导论》下载
  7. 基于websocket的简单通信
  8. JSP 页面 jstl 时间戳 long型转时间
  9. python用户标识符条件_使用sum(if…)或条件语句操作两个数据集,这些语句没有hivehadooppython的公共标识符...
  10. R12.2.6 installation failed with - Unable to rename database
  11. 译 | 像使用一台主机一样管理集群
  12. 计算机上机操作表格试题,2013职称计算机考试Excel表格操作试题(1)
  13. 毫米波雷达系统构成、测量原理(测距、测速、角速度)
  14. coreutils8.32 hostid命令和源码分析
  15. go模拟android浏览器,模拟浏览器登录操作
  16. 图像处理-图像边缘处理
  17. pvs-stdio ue4_PVS-Studio –用于C,C ++,C#和Java的静态代码分析器
  18. SCI、EI、ISTP、ISR简介
  19. 美团智能支付稳定性测试实战
  20. 汉诺塔python创新设计大赛_机械创新设计大赛官网

热门文章

  1. Linux网络操作系统及应用教程(项目式)项目四
  2. batchplot3.5.9如何使用_Flink 1.9 实战:使用 SQL 读取 Kafka 并写入 MySQL
  3. java OA开源办公系统源码下载
  4. 奔图cp2510dn linux,奔图CP2510DN驱动
  5. cmd下载ftp文件
  6. logistic回归模型
  7. DirectShow源码下载
  8. SIM900A高效完整的STM32代码
  9. java判断简体和繁体字_java获取系统语言(区分简体中文和繁体中文)
  10. 【UE4】解决局域网联机游戏连接不上的问题