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常见文件操作的函数示例代码
Nov 15 Python
Python import自定义模块方法
Feb 12 Python
Python字符串格式化的方法(两种)
Sep 19 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
Python内置函数reversed()用法分析
Mar 20 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
在python中使用xlrd获取合并单元格的方法
Dec 26 Python
python实现AES加密和解密
Mar 27 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
python 实现压缩和解压缩的示例
Sep 22 Python
Python基于Faker假数据构造库
Nov 30 Python
浅谈pytorch中的dropout的概率p
May 27 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
js继承实现方法详解
2016/12/16 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
Node.js 的模块知识汇总
2017/08/16 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
Django实现分页功能
2018/07/02 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
python学生管理系统的实现
2020/04/05 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
机械工程师的岗位职责
2013/11/17 职场文书
机械专业应届生求职信
2013/12/12 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
社区服务活动感想
2015/08/11 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python