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字符串格式化
Jun 15 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
python判断数字是否是超级素数幂
Sep 27 Python
python安装scipy的方法步骤
Jun 26 Python
Python Pandas对缺失值的处理方法
Sep 27 Python
python匿名函数的使用方法解析
Oct 10 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
Python日志syslog使用原理详解
Feb 18 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
公认8个效率最高的爬虫框架
Jul 28 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代码优化及php相关问题总结
2006/10/09 PHP
php字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
python3实现表白神器
2019/04/09 Python
python 实现简单的FTP程序
2019/12/27 Python
python super用法及原理详解
2020/01/20 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
幼儿园教师工作制度
2014/01/22 职场文书
新年联欢会主持词
2014/03/27 职场文书
服务理念口号
2014/06/11 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书