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 UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
pytorch中tensor的合并与截取方法
Jul 26 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
Python 导入文件过程图解
Oct 15 Python
pytorch常见的Tensor类型详解
Jan 15 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 Python
Python Merge函数原理及用法解析
Sep 16 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 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
如何删除多级目录
2006/10/09 PHP
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
python 使用shutil复制图片的例子
2019/12/13 Python
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
化学教师自荐信范文
2013/12/28 职场文书
写给老师的表扬信
2014/01/21 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript