Python实现中值滤波去噪方式

中值滤波器去噪:

中值滤波的主要原理是将数字图像中的某点用该点的邻域中各个像素值的中值所来代替,这样就能让目标像素周围能够更好的接近真实值,比如一张白纸上有一个黑点时,黑点的像素值比较大,经过中值滤波过后,黑点附近的像素值可能就会变小。经过中值滤波后一些相对孤立的噪声点就容易被清除掉,这样就能提高图像的质量。

所以中值滤波器去噪的一个优点就是对椒盐噪声的去除具有很好的效果,具体操作是选取一个中心邻域,然后给邻域类各个像素的灰度值按大小进行排序,选取排序序列中的中值作为该邻域中心点的像素值的灰度值。

它的缺点是当邻域挑选过大时,可能会造成图像特征丢失。

实现代码如下:

import numpy as np
import cv2
from PIL import Image
import scipy.signal as signal
import matplotlib.pyplot as plt
#创建一个500*500的矩阵
input_images = np.zeros((500, 500))
filename = "E:/pycharm/GraduationDesign/Test/testtwo.png"
#convert将当前图像转换为灰度模式,并且返回新的图像。
#将图片在重新定义的矩阵中再显示,不然可能会只显示部分。
img = Image.open(filename).resize((500, 500)).convert('L')
plt.subplot(221)
plt.title('原图', fontproperties=font_set)
plt.imshow(img)
#图像的尺寸,按照像素数计算。它的返回值为宽度和高度的二元组(width, height)。
width = img.size[0]
height = img.size[1]
threshold=130
#可以改写代码使其成为二值化,此代码可理解为反向二值化
for h in range(height):
 for w in range(width):
  #getpixel直接获得(h,w)处的像素直接返回这个点三个通道的像素值
  #返回给定位置的像素值。如果图像为多通道,则返回一个元组(r,g,b,阈值)。
  #如果改成(w,h)出现的图像会倒转
  if img.getpixel((w, h)) < threshold:

   input_images[h, w] = 1
  else:
   input_images[h, w] = 0
plt.subplot(222)
plt.title('二值化', fontproperties=font_set)
plt.imshow(input_images)

data = signal.medfilt2d(np.array(img), kernel_size=3) # 二维中值滤波
for h in range(0, height):
 for w in range(0, width):
  if data[h][w] < 128:
   input_images[h, w] = 0
  else:
   input_images[h, w] = 1

plt.subplot(223)
plt.title('中值滤波去噪(3*3)', fontproperties=font_set)
plt.imshow(input_images)

data = signal.medfilt2d(np.array(img), kernel_size=7) # 二维中值滤波
for h in range(0, height):
 for w in range(0, width):
  if data[h][w] < 128:
   input_images[h, w] = 0
  else:
   input_images[h, w] = 1
plt.subplot(224)
plt.title('中值滤波去噪(7*7)', fontproperties=font_set)
plt.imshow(input_images)
plt.show()

效果图:

图中的小黑点是我简单模拟实现图片中含有椒盐噪声中所加入的。当中值滤波领域选取过大时会使图片失真。

以上这篇Python实现中值滤波去噪方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python 中值滤波,椒盐去噪,图片增强实例

    受光照.气候.成像设备等因素的影响,灰度化后的图像存在噪声和模糊干扰,直接影响到下一步的文字识别,因此,需要对图像进行增强处理.图片预处理中重要一环就是椒盐去澡,通常用到中值滤波器进行处理,效果很好.中值滤波器是一种非线性滤波器,其基本原理是把数字图像中某点的值用其领域各点值的中值代替. 如求点[i,j]的灰度值计算方法为: (1)按灰度值顺序排列[i,j]领域中的像素点: (2)取排序像素集的中间值作为[i,j]的灰度值.中值滤波技术能有效抑制噪声. 直接上代码,希望给大家有帮助: impor

  • opencv python 图像去噪的实现方法

    在早先的章节里,我们看到很多图像平滑技术如高斯模糊,Median模糊等,它们在移除数量小的噪音时在某种程度上比较好用.在这些技术里,我们取像素周围的一小部分邻居,做一些类似于高斯平均权重,中值等替换掉中间的元素.简单说,移除一个像素的噪音是基于本地邻居的. 噪音有一个属性,噪音一般被认为是具有零平均值的随机变量.假设一个像素噪音,p = p0 + n, 其中p0是像素的真实值,n是那个像素的噪音.你可以从不同图像取大量的同一个像素(N)并计算他们的平均值,理想情况下,你应该得到p=p0,因为均值

  • Python实现图像去噪方式(中值去噪和均值去噪)

    实现对图像进行简单的高斯去噪和椒盐去噪. 代码如下: 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(

  • Python实现中值滤波去噪方式

    中值滤波器去噪: 中值滤波的主要原理是将数字图像中的某点用该点的邻域中各个像素值的中值所来代替,这样就能让目标像素周围能够更好的接近真实值,比如一张白纸上有一个黑点时,黑点的像素值比较大,经过中值滤波过后,黑点附近的像素值可能就会变小.经过中值滤波后一些相对孤立的噪声点就容易被清除掉,这样就能提高图像的质量. 所以中值滤波器去噪的一个优点就是对椒盐噪声的去除具有很好的效果,具体操作是选取一个中心邻域,然后给邻域类各个像素的灰度值按大小进行排序,选取排序序列中的中值作为该邻域中心点的像素值的灰度值

  • Python 实现中值滤波、均值滤波的方法

    红包: Lena椒盐噪声图片: # -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017 @author: Don """ from tkinter import * from skimage import io import numpy as np im=io.imread('lena_sp.jpg', as_grey=True) im_copy_med = io.imrea

  • python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法

    python-opencv 中值滤波{cv2.medianBlur(src, ksize)} 中值滤波将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的 中值 代替 .与邻域平均法类似,但计算的是中值 #用中值法 for y in xrange(1,myh-1): for x in xrange(1,myw-1): lbimg[y,x]=np.median(tmpimg[y-1:y+2,x-1:x+2] 下面调用opencv的函数 # -*- coding: utf-8 -*- #c

  • openCV中值滤波和均值滤波的代码实现

    目录 一.均值滤波 二.中值滤波  在开始我们今天的博客之前,我们需要先了解一下什么是滤波: 首先我们看一下图像滤波的概念.图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性. 下图左边是原图右边是噪声图: 消除图像中的噪声成分叫作图像的平滑化或滤波操作.信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没.因此一个能降低高频成分幅度的滤波

  • C++实现中值滤波的示例代码

    目录 冒泡排序实现: 中值滤波的实现: 为了加深对中值滤波算法的理解以及方便以后更好的复习,我将该算法的一些重点细节和实现过程踩过的坑记录下来. 中值滤波器是一种非线性滤波器,或者叫统计排序滤波器. 适用对象:带椒盐噪声的图像 由于椒盐噪声像素值与原图像素值没有关联,随机性较大,因此使用中值滤波可有效滤掉噪声. 中值滤波需要对像素值进行排序,因此首先写一个冒泡排序算法. 冒泡排序实现: 为提高效率加入标志位flag,当第i次寻找最大值时,如果相邻两个数均未发生互换,此时flag位为false,即

  • Python实现二值掩膜影像去噪与边缘强化方法详解

    目录 前言 一.方法 二.代码 三.效果测试 前言 这篇博客主要解决的一个问题是掩膜图像的噪声去除和边缘强化,如下图1所示.可以看到掩膜图像上有很多的斑点噪声,而且掩膜的轮廓也不够清晰.所以我们的目标就是一方面尽可能把这些斑点噪声去除,另一方面尽量突出掩膜边界.另外处理后的掩膜可以比真值大一些,但最好不能小. 图1 原始二值化影像 一.方法 因为之前有做过相关的工作,所以对于保留边界的斑点噪声消除第一反应是使用中值滤波.但很显然对于我们这个应用,单纯中值滤波是不够的.所以就想着那就采用多步处理,

  • opencv 图像滤波(均值,方框,高斯,中值)

    为什么要使用滤波 消除图像中的噪声成分叫作图像的平滑化或滤波操作.信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没.因此一个能降低高频成分幅度的滤波器就能够减弱噪声的影响. 如下图,左图带有椒盐噪声,右图为使用中值滤波处理后的图片. 图像滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声. python +opencv讲解 均值滤波 含义 如图:如果我们想对红色点进行处理,则它

  • opencv3/C++图像滤波实现方式

    图像滤波在opencv中可以有多种实现形式 自定义滤波 如使用3×3的掩模: 对图像进行处理. 使用函数filter2D()实现 #include<opencv2/opencv.hpp> using namespace cv; int main() { //函数调用filter2D功能 Mat src,dst; src = imread("E:/image/image/daibola.jpg"); if(!src.data) { printf("can not l

随机推荐