中值滤波

【定义】中值滤波是一种非线性的信号处理方法,所以它是一种非线性滤波器,也是一种统计排序滤波器。它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
【目的】中值滤波对孤立的噪声像素即椒盐噪声、脉冲噪声具有良好的滤波效果,可以保持图像的边缘特性,不会使图像产生显著的模糊。
【基本原理/思想】中值滤波是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。举个例子:
【具体操作/流程】

  1. 用一个奇数点的移动窗口,并将模板中心与图中某个像素位置重合;
  2. 读取模板下各对应的像素灰度值/从小到大,从大到小均可;
  3. 选取灰度序列中,中间的一个像素的灰度值;
  4. 将中间值赋给模板中心位置的像素。

CV自带medianBlur函数
dst = cv2.medianBlur(src, ksize)
参数说明:
1.src: 需要滤波的图片;
2.ksize:核大小,必须是比1大的奇数【举个例子:3,5,7…】

也可以自己写median_Blur函数
废话不多说,上菜。。。
【python代码】

import numpy as np
import cv2
from copy import deepcopy
from PIL import Image
from matplotlib import pyplot as plt#####################噪声图像###########################
def add_salt_noise(img, snr = 0.5):SNR = snr           #指定信噪比size = img.size     #获取总共像素个数#print(type(size))noiseSize = int(size * (1 - SNR))for i in range(0, noiseSize):# 随机获取 某个点xi = int(np.random.uniform(0, img.shape[1]))xj = int(np.random.uniform(0, img.shape[0]))if img.ndim == 2:  #判断是否为2维图像(即灰度图像)img[xj, xi] = 0     #设置值为黑点elif img.ndim == 3:img[xj, xi] = 0     #设置值为黑点,也可以设置为白色255return img#####################中值滤波###########################
def median_Blur(img, filiter_size = 3):  #当输入的图像为彩色图像image_copy = np.array(img, copy = True).astype(np.float32)processed = np.zeros_like(image_copy)middle = int(filiter_size / 2)r = np.zeros(filiter_size * filiter_size)g = np.zeros(filiter_size * filiter_size)b = np.zeros(filiter_size * filiter_size)for i in range(middle, image_copy.shape[0] - middle):for j in range(middle, image_copy.shape[1] - middle):count = 0#依次取出模板中对应的像素值for m in range(i - middle, i + middle +1):for n in range(j - middle, j + middle + 1):r[count] = image_copy[m][n][0]g[count] = image_copy[m][n][1]b[count] = image_copy[m][n][2]count += 1r.sort()g.sort()b.sort()processed[i][j][0] = r[int(filiter_size*filiter_size/2)]processed[i][j][1] = g[int(filiter_size*filiter_size/2)]processed[i][j][2] = b[int(filiter_size*filiter_size/2)]processed = np.clip(processed, 0, 255).astype(np.uint8)return processed#####################中值滤波###########################
def median_Blur_gray(img, filiter_size = 3):  #当输入的图像为灰度图像image_copy = np.array(img, copy = True).astype(np.float32)processed = np.zeros_like(image_copy)middle = int(filiter_size / 2)for i in range(middle, image_copy.shape[0] - middle):for j in range(middle, image_copy.shape[1] - middle):temp = []for m in range(i - middle, i + middle +1):for n in range(j - middle, j + middle + 1):if m-middle < 0 or m+middle+1 >image_copy.shape[0] or n-middle < 0 or n+middle+1 > image_copy.shape[1]:temp.append(0)else:temp.append(image_copy[m][n])#count += 1temp.sort()processed[i][j] = temp[(int(filiter_size*filiter_size/2)+1)]processed = np.clip(processed, 0, 255).astype(np.uint8)return processedif __name__ == "__main__":img = input("Please input name of image:")  #默认是string类型img = cv2.imread(img)#plt.imshow显示cv2.imread读取的图像有色差发蓝的问题#重新整合r,g,b#img = Image.open(img)b, g, r = cv2.split(img)src_img = cv2.merge([r, g, b])img_demo = deepcopy(src_img)snr = float(input("Please input signal noise ratio:"))img_salt = add_salt_noise(img_demo, snr)filiter_size = int(input("Please input size of filiter:"))median_blur= median_Blur(img_salt, filiter_size)plt.figure("Image processing---MedianBlur")           #图像窗口名称plt.subplot(1, 3, 1)plt.imshow(src_img)plt.axis('off')         #关掉坐标轴plt.title("src_img")plt.subplot(1, 3, 2)plt.imshow(img_salt)plt.axis('off')         #关掉坐标轴plt.title("img_salt")plt.subplot(1, 3, 3)plt.imshow(median_blur)plt.axis('off')         #关掉坐标轴plt.title("median_blur")plt.tight_layout()  # 调整整体空白plt.subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=None)  # 调整子图间距plt.savefig("reult.png", dpi=1000)plt.show()

运行过程:

Please input name of image: whitetulip.jpg
Please input signal noise ratio: 0.99
Please input size of filiter: 3

结果显示:

if __name__ == "__main__":img = input("Please input name of image:")  #默认是string类型img = cv2.imread(img)img_gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#plt.imshow显示cv2.imread读取的图像有色差发蓝的问题#重新整合r,g,b#img = Image.open(img)b, g, r = cv2.split(img)src_img = cv2.merge([r, g, b])img_demo = deepcopy(img_gry)snr = float(input("Please input signal noise ratio:"))img_salt = add_salt_noise(img_demo, snr)filiter_size = int(input("Please input size of filiter:"))median_blur = median_Blur_gray(img_salt, filiter_size)plt.figure("Image processing---MedianBlur")           #图像窗口名称plt.subplot(1, 3, 1)plt.imshow(img_gry, cmap='gray')plt.axis('off')         #关掉坐标轴plt.title("img_gry")plt.subplot(1, 3, 2)plt.imshow(img_salt, cmap='gray')plt.axis('off')         #关掉坐标轴plt.title("img_salt")plt.subplot(1, 3, 3)plt.imshow(median_blur, cmap='gray')plt.axis('off')         #关掉坐标轴plt.title("median_Blur")plt.tight_layout()  # 调整整体空白plt.subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=None)  # 调整子图间距plt.savefig("reult.png", dpi=1000)plt.show()

运行过程:

Please input name of image: whitetulip.jpg
Please input signal noise ratio: 0.99
Please input size of filiter: 3

结果显示:

图像处理——中值滤波相关推荐

  1. 数字图像处理——中值滤波及其改进算法

    一.算法介绍 中值滤波器是非线性滤波器的一个例子,它在保留图像特征方面非常有效. 但是,滤波器的窗口大小直接影响中值滤波器的性能. 较小的窗口保留了特征,但会导致噪声抑制的减少. 在较大窗口的情况下, ...

  2. 数字图像处理 中值滤波 MATLAB实验

    一.原理_中值滤波 中值滤波的基本思想是将图像中每个像素的灰度值用其邻域内像素灰度的中值代替,它是一种非线性平滑滤波算法. 设加噪图像为 f(x,y) ,经中值滤波处理后的图像为g(x,y) ,则: ...

  3. matlab图像处理-中值滤波原理

    中值滤波原理   中值滤波本质上是一种统计排序滤波器.对于原图像中某点(i,j),中值滤波以该点为中心的邻域内的所有像素的统计排序中值作为(i,j)点的响应.   中值不同于均值,是指排序队列中位于中 ...

  4. java 中值滤波_matlab图像处理-中值滤波原理(示例代码)

    中值滤波原理 ??中值滤波本质上是一种统计排序滤波器.对于原图像中某点(i,j),中值滤波以该点为中心的邻域内的所有像素的统计排序中值作为(i,j)点的响应. ??中值不同于均值,是指排序队列中位于中 ...

  5. 数字图像处理——中值滤波中心加权中值滤波

    引言:在处理图像时,线性滤波将破坏边缘,而且不能有效滤除脉冲噪声.非线性滤波基于对输入信号序列的一种非线性映射关系,常可把某一特定的噪声近似映射为零而保留信号的重要特征,因而可以在一定程度上克服线性滤 ...

  6. 数字图像处理——中值滤波降噪

    使用滤波模板中像素点的中值点作为目标像素,这就称为中值滤波降噪(顾名思义) Python实现过程如下: 图像数据为: 图像中存在典型的椒盐噪声,而中值降噪,对椒盐噪声的作用是非常有效的. 导入要使用的 ...

  7. MATLAB--数字图像处理 中值滤波

    中值滤波 概念:   中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实 ...

  8. matlab 中medfilt2报错,Matlab图像处理——中值滤波medfilt2问题解决

    程序: I=imread('13.jpg');%读入图像 imshow(I); h=imnoise(I,'salt & pepper');%为I图片叠加椒盐噪声噪声 figure;imshow ...

  9. 《OpenCV3编程入门》学习笔记6 图像处理(二)非线性滤波:中值滤波、双边滤波

    第6章 图像处理 6.2 非线性滤波:中值滤波.双边滤波 6.2.1 非线性滤波 很多情况下,使用领域像素的非线性滤波会得到更好的效果,如在噪声是散粒噪声而不是高斯噪声,即图像偶尔会出现很大值时,高斯 ...

  10. Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波

    作者 | 杨秀璋,责编 | 夕颜 题图  | 视觉中国 出品 | CSDN博客 本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波.全文均是 ...

最新文章

  1. MySQL基础之控制台常用命令
  2. 【Protocol Buffer】Protocol Buffer入门教程(八):Windows平台部署Protobuf环境
  3. 理解 RIPv1使用广播更新路由与RIPv2使用组播更新路由的区别
  4. MQTT工作笔记0007---剩余长度
  5. 用Python2编译Python3.X的代码: __future__ 模块
  6. java 子串替换_Java中的多个同时子串替换
  7. Springboot物业管理系统
  8. ios 图片逆时针旋转_iOS 图片旋转方法实例代码
  9. 2013年全国天线年会参展商名录及观展指南
  10. android高仿输入法,仿ios输入法
  11. JavaScript定义注册页面
  12. 个人成长:谈谈工作之余如何提高个人技术水平
  13. TCP三次握手和四次挥手最通俗解释说明
  14. coolwulf的乳腺癌网站介绍和操作方式
  15. 如何快速提取视频中的文案?
  16. P1428 小鱼比可爱(C语言)
  17. 好用的个人树洞外链系统程序源码
  18. 【Django】Django+Ajax下载文件(使用FileResponse)
  19. 介绍几个在线画流程图的工具
  20. 2021 市场上cmr硬盘盘点

热门文章

  1. matlab中gurobi lic file 打不开
  2. git公钥私钥及密码说明
  3. Microsemi Libero使用技巧7——离线安装IP Core
  4. 北京单身狗都去哪儿了
  5. SuperMap 基本概念
  6. 一文看懂神经网络工作原理
  7. 中国移动通信互联网短信网关接口协议CMPP2.0(普通文本短信、二进制数据短信)
  8. 浏览器解析渲染页面过程
  9. 数组方法的增删等19种操作:unshift 、shift,push、pop、splice等等...!
  10. 秀!搭建一个永久运行的个人服务器!