Python实现图像去噪方式(中值去噪和均值去噪)


Posted in Python onDecember 18, 2019

实现对图像进行简单的高斯去噪和椒盐去噪。

代码如下:

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import random
import scipy.misc
import scipy.signal
import scipy.ndimage
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=10)
 
def medium_filter(im, x, y, step):
  sum_s = []
  for k in range(-int(step / 2), int(step / 2) + 1):
    for m in range(-int(step / 2), int(step / 2) + 1):
      sum_s.append(im[x + k][y + m])
  sum_s.sort()
  return sum_s[(int(step * step / 2) + 1)]
 
 
def mean_filter(im, x, y, step):
  sum_s = 0
  for k in range(-int(step / 2), int(step / 2) + 1):
    for m in range(-int(step / 2), int(step / 2) + 1):
      sum_s += im[x + k][y + m] / (step * step)
  return sum_s
 
 
def convert_2d(r):
  n = 3
  # 3*3 滤波器, 每个系数都是 1/9
  window = np.ones((n, n)) / n ** 2
  # 使用滤波器卷积图像
  # mode = same 表示输出尺寸等于输入尺寸
  # boundary 表示采用对称边界条件处理图像边缘
  s = scipy.signal.convolve2d(r, window, mode='same', boundary='symm')
  return s.astype(np.uint8)
 
 
def convert_3d(r):
  s_dsplit = []
  for d in range(r.shape[2]):
    rr = r[:, :, d]
    ss = convert_2d(rr)
    s_dsplit.append(ss)
  s = np.dstack(s_dsplit)
  return s
 
 
def add_salt_noise(img):
  rows, cols, dims = img.shape
  R = np.mat(img[:, :, 0])
  G = np.mat(img[:, :, 1])
  B = np.mat(img[:, :, 2])
 
  Grey_sp = R * 0.299 + G * 0.587 + B * 0.114
  Grey_gs = R * 0.299 + G * 0.587 + B * 0.114
 
  snr = 0.9
 
  noise_num = int((1 - snr) * rows * cols)
 
  for i in range(noise_num):
    rand_x = random.randint(0, rows - 1)
    rand_y = random.randint(0, cols - 1)
    if random.randint(0, 1) == 0:
      Grey_sp[rand_x, rand_y] = 0
    else:
      Grey_sp[rand_x, rand_y] = 255
  #给图像加入高斯噪声
  Grey_gs = Grey_gs + np.random.normal(0, 48, Grey_gs.shape)
  Grey_gs = Grey_gs - np.full(Grey_gs.shape, np.min(Grey_gs))
  Grey_gs = Grey_gs * 255 / np.max(Grey_gs)
  Grey_gs = Grey_gs.astype(np.uint8)
 
  # 中值滤波
  Grey_sp_mf = scipy.ndimage.median_filter(Grey_sp, (7, 7))
  Grey_gs_mf = scipy.ndimage.median_filter(Grey_gs, (8, 8))
 
  # 均值滤波
  Grey_sp_me = convert_2d(Grey_sp)
  Grey_gs_me = convert_2d(Grey_gs)
 
  plt.subplot(321)
  plt.title('加入椒盐噪声',fontproperties=font_set)
  plt.imshow(Grey_sp, cmap='gray')
  plt.subplot(322)
  plt.title('加入高斯噪声',fontproperties=font_set)
  plt.imshow(Grey_gs, cmap='gray')
 
  plt.subplot(323)
  plt.title('中值滤波去椒盐噪声(8*8)',fontproperties=font_set)
  plt.imshow(Grey_sp_mf, cmap='gray')
  plt.subplot(324)
  plt.title('中值滤波去高斯噪声(8*8)',fontproperties=font_set)
  plt.imshow(Grey_gs_mf, cmap='gray')
 
  plt.subplot(325)
  plt.title('均值滤波去椒盐噪声',fontproperties=font_set)
  plt.imshow(Grey_sp_me, cmap='gray')
  plt.subplot(326)
  plt.title('均值滤波去高斯噪声',fontproperties=font_set)
  plt.imshow(Grey_gs_me, cmap='gray')
  plt.show()
 
 
def main():
  img = np.array(Image.open('E:/pycharm/GraduationDesign/Test/testthree.png'))
  add_salt_noise(img)
 
 
if __name__ == '__main__':
  main()

效果如下

Python实现图像去噪方式(中值去噪和均值去噪)

以上这篇Python实现图像去噪方式(中值去噪和均值去噪)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python原始套接字编程示例分享
Feb 21 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
Python3.5实现的罗马数字转换成整数功能示例
Feb 25 Python
Django ORM 查询管理器源码解析
Aug 05 Python
python实现猜拳小游戏
Apr 05 Python
Django框架models使用group by详解
Mar 11 Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
Python数据可视化之Seaborn的安装及使用
Apr 19 Python
python 中值滤波,椒盐去噪,图片增强实例
Dec 18 #Python
Django中使用MySQL5.5的教程
Dec 18 #Python
Python hashlib加密模块常用方法解析
Dec 18 #Python
Python实现中值滤波去噪方式
Dec 18 #Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 #Python
Python字典底层实现原理详解
Dec 18 #Python
Python利用PyExecJS库执行JS函数的案例分析
Dec 18 #Python
You might like
PHP 采集心得技巧
2009/05/15 PHP
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
js资料prototype 属性
2007/03/13 Javascript
Javascript中的数学函数
2007/04/04 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
python实现爬取图书封面
2018/07/05 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
家居设计专业个人自荐信范文
2013/11/26 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
工商企业管理专业自荐信范文
2014/04/12 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
高一军训口号
2015/12/25 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS