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中的类与对象之描述符详解
Mar 27 Python
Python变量赋值的秘密分享
Apr 03 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
python找出一个列表中相同元素的多个索引实例
Jun 11 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
Python+DeOldify实现老照片上色功能
Jun 21 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
第三节 定义一个类 [3]
2006/10/09 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
微信小程序开发探究
2016/12/27 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
Python编写生成验证码的脚本的教程
2015/05/04 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
深入了解Django中间件及其方法
2019/07/26 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
酒店公关部经理岗位职责
2013/11/24 职场文书
铲车司机岗位职责
2014/03/15 职场文书
品质标语大全
2014/06/21 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
小学领导班子对照材料
2014/08/23 职场文书
购房委托书范本
2014/09/18 职场文书
欢迎新生标语
2014/10/06 职场文书
万能检讨书2000字
2014/10/17 职场文书
小学教师年度个人总结
2015/02/05 职场文书
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis