精华内容
下载资源
问答
  • 今天小编就为大家分享一篇python 中值滤波,椒盐去噪,图片增强实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python 中值滤波

    千次阅读 2017-07-21 12:50:43
    中值滤波是数字信号处理和数字图像处理领域使用较多的预处理技术,使用邻域内所有信号的中位数替换中心像素的值,可以在滤除异常值的情况下较好地保留纹理信息。该技术会在一定程度上造成图像模糊和失真,滤波窗口变...

    中值滤波是数字信号处理和数字图像处理领域使用较多的预处理技术,使用邻域内所有信号的中位数替换中心像素的值,可以在滤除异常值的情况下较好地保留纹理信息。该技术会在一定程度上造成图像模糊和失真,滤波窗口变大时会非常明显。

    import numpy as np

    from PIL import Image

    import scipy.signal as signal


    im = Image.open('lena.jpg')

    data = []

    width, height = im.size


    # 读取图像像素值

    for in range(height):

        row = []

        for in range(width):

            value = im.getpixel((w,h))

            row.append(value)

        data.append(row)


    # 二维中值滤波

    data = np.float32(data)

    # 滤波窗口的大小会对结果产生很大影响

    data = signal.medfilt2d(data, (3,3))


    # 创建并保存结果图像

    for in range(height):

        for in range(width):

            im.putpixel((w,h), int(data[h][w]))


    im.save('result.jpg')


    原始图像:

    滤波窗口为(3,3)时的结果:

    滤波窗口为(5,5)时的结果:

    滤波窗口为(11,11)时的结果:


    展开全文
  • 前言在进行图像空域处理时,对于椒盐噪声的图像,中值滤波是一个很不错的选择,一般来说mask有矩形 椭形 和十字形,十字形被认为在处理含有少数尖锥基元的图像更能保证尖锥的形状,由于没找到Matlab自带的函数库实现...

    前言

    在进行图像空域处理时,对于椒盐噪声的图像,中值滤波是一个很不错的选择,一般来说mask有矩形 椭形 和十字形,

    十字形被认为在处理含有少数尖锥基元的图像更能保证尖锥的形状,由于没找到Matlab自带的函数库实现十字窗口,并且论坛上有极少的Opencv基于python的代码,大多还是付费的,于是自己写了一个模板,能够实现基本原理,至于效果和处理速度,有时间以后会进行优化。

    中值滤波

    中值滤波的原理很简单,不考虑图像填充,将一个框架,框在图像像素,框架上的像素数值按升降序排列,取中位数作为原像素点的新值。矩形的窗口都有专门的函数轻松实现,十字窗口则是以像素点为中心点,向四周直线发散,形成十字样式。

    至于python上的实现逻辑,我将它分成RGB模式和Gray模式。

    先说灰度模式,比较简单,它是一个二维张量,只需要用模板进行排序,通过基础的循环进行mask滑动,并且重新赋值即可。

    RGB模式比灰度模式多了一步,将RGB图像是三维张量,先将其拆分成3个二维张量,然后再按照灰度模式的方法进行赋值,最后再进行图像合并。

    目前代码的计算复杂度较高,还没有进行优化,彩色图像处理会花费较长时间。

    所需库及函数特点

    OpenCV

    numpy

    1.不需要指定色彩模式,只要是RGB或者灰度图可以直接传入函数

    2.支持自定义框架大小

    3.支持常数边界填充,也可以稍微改动进行OpenCV支持的所有填充方式

    4.目前就写了十字窗口,所以type只支持十字类型

    5.耗时间长效果未调试

    代码(请确保安装所需库)

    def medfilter (pic,scale=[3,3],pad = [0,0,0],type='cross'):

    '''

    中值滤波器

    pic 为被作用图片

    type 为中值窗口类型 可选参数为 'cross'

    scale 为窗口大小,如[3,3]

    pad 为填充方法 输入值为一维矩阵

    '''

    import numpy as np

    import cv2 as cv

    #获取图像的长宽基本信息,以及边界填充上下左右的距离,并实现边界填充

    top_bottom = int((scale[1]-1)/2)

    left_right = int((scale[0]-1)/2)

    mednum = (scale[1]+scale[0])/2-1

    total_dim = np.shape(pic)

    pic_line = total_dim[0]

    pic_row = total_dim[1] #列

    pic = cv.copyMakeBorder(pic,top_bottom,top_bottom,left_right,left_right,cv.BORDER_CONSTANT,value = pad)

    #通过双重for循环进行十字框架的游走,以当前元素为中心点进行四周发散,形成十字框架,并排序后赋予新的像素值

    def crossfilt(pic = pic ,pic_line = pic_line,pic_row = pic_row):

    for i in range(pic_line):

    for j in range(pic_row):

    mask = [pic[i,j], pic[i+1,j], pic[i-1,j], pic[i,j+1], pic[i,j-1]]

    pic[i,j] = np.sort(mask)[int(mednum)]

    #判断图像模式大于2则为RGB模式,小于等于2则为灰度模式

    if len(total_dim)>2:

    r,g,b = cv.split(pic)

    r,g,b = medfilter(r),medfilter(g),medfilter(b)

    pic = cv.merge([r,g,b])

    elif len(total_dim)<=2:

    crossfilt(pic)

    return pic

    '''

    =====================以下为测试区===============================================================

    '''

    import cv2 as cv

    import numpy as np

    A = cv.imread('lena2.png',0)

    B = medfilter(A)

    cv.namedWindow('img',cv.WINDOW_FREERATIO)

    cv.imshow('img',B)

    cv.waitKey(0)

    cv.destroyAllWindows()

    cv.imwrite('lena2po.png',B)

    效果

    以下为rgb模式图和灰度图的椒盐噪声图分别用以上代码进行十字中指滤波后的效果:

    边框黑边是因为用的全0填充,可以通过裁切去除,不影响。

    用了3×3的模板,模板有点小,处理效果并不是很理想,但是本章旨在实现,效果和算法效率将在以后进行优化。

    展开全文
  • 1、中值滤波简介 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本...

    1、中值滤波简介
    中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.

    中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为33,55区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。
    2、定义:
    中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。此外,中值滤波的算法比较简单,也易于用硬件实现。所以,中值滤波方法一经提出后,便在数字信号处理领得到重要的应用。

    中值滤波方法:对一个数字信号序列xj(-∞<j<∞)进行滤波处理时,首先要定义一个长度为奇数的L长窗口,L=2N+1,N为正整数。设在某一个时刻,窗口内的信号样本为x(i-N),…,x(i),…,x(i+N),其中x(i)为位于窗口中心的信号样本值。对这L个信号样本值按从小到大的顺序排列后,其中值,在i处的样值,便定义为中值滤波的输出值,写为如图1.

    中值滤波是在"最小绝对误差"准则下的最优滤波。

    在实际应用中,随着所选用窗口长度的增加,滤波的计算量将会迅速增加。因此,寻求中值滤波的快速算法,是中值滤波理论的一个重要研究内容。中值滤波的快速算法,一般采用下述三种方式:①直方图数据修正法;②样本值二进制表示逻辑判断法;③数字和模拟的选择网络法。

    对中值滤波的理论研究,还集中于统计特性分析和根序列的描述方面。当一个信号序列经一特定窗口长度的中值滤波反复处理后,它会收敛于某一个不再变化的序列,这个序列称为中值滤波的根序列。根序列是描述中值滤波特性的一个重要概念。通过对根序列结构的研究,可以确定原信号序列中,哪些成分可以经中值滤波后保留下来,哪些成分将被抑制。这对确定中值滤波器的窗口长度,提供了重要依据。用VLSI实现的中值滤波器芯片,可供实时处理中应用。
    3、实现方法
    1:通过从图像中的某个采样窗口取出奇数个数据进行排序

    2:用排序后的中值取代要处理的数据即可
    4、应用
    中值滤波法对消除椒盐噪声非常有效,在光学测量条纹图象的相位分析处理方法中有特殊作用,但在条纹中心分析方法中作用不大.

    中值滤波在图像处理中,常用于保护边缘信息,是经典的平滑噪声的方法。
    5、代码实现
    (1)有填充
    import numpy as np
    from imageio import imread
    from scipy.misc import imsave, imresize
    import matplotlib.pyplot as plt
    from PIL import Image
    #中值滤波
    def MedianFilter(src,k=21):
    imarray = np.copy(src) #读取图像副本
    height, width,C = imarray.shape#读取图像数据形状大小
    edge = int((k - 1) / 2) # 根据模板计算填充
    new_arr = np.zeros((height + edge * 2, width + edge * 2, C), dtype=np.float)
    new_arr[edge: edge + height, edge: edge + width] = src.copy().astype(np.float)
    for i in range(height):
    for j in range(width):
    for c in range©:
    #查找中值,用中值替换原来的像素返回原位置
    new_arr[i+edge, j+edge,c] = np.median(imarray[i:i + k, j :j + k,c])

    new_arr = new_arr[edge: edge + height, edge: edge + width].astype(np.uint8)
    new_im = Image.fromarray(new_arr)
    
    return(new_im)
    

    if name == “main”:
    input_images = np.zeros((300, 300))
    im = imread(‘E:\mmn\ssz.jpg’)
    plt.subplot(121)
    plt.imshow(im)
    out_img = MedianFilter(im)
    plt.subplot(122)
    plt.imshow(out_img)
    plt.show()
    在这里插入图片描述

    (2)无填充
    import numpy as np
    from imageio import imread
    from scipy.misc import imsave, imresize
    import matplotlib.pyplot as plt
    from PIL import Image
    #中值滤波
    def MedianFilter(src,k=21, padding=None):
    imarray = np.copy(src) #读取图像副本
    height, width,C = imarray.shape#读取图像数据形状大小
    if not padding: #无填充方式
    edge = int((k - 1) / 2) #根据模板计算出边缘
    if height - 1 - edge <= edge or width - 1 - edge <= edge :#判断模板是否可用
    print(“The parameter k is to large.”)
    return None
    new_arr = np.zeros((height, width,C), dtype=np.uint8)#初始化
    for i in range(height):
    for j in range(width):
    for c in range©:
    if i <= edge-1 or i >= height - 1 - edge or j <= edge-1 or j >= width - edge - 1:
    new_arr[i, j,c] = imarray[i, j,c] #判断像素位置是否是边缘位置如果是返回原像素到原来的位置
    else:
    #查找中值,用中值替换原来的像素返回原位置
    new_arr[i, j,c] = np.median(imarray[i-edge:i + edge-1, j -edge:j + edge-1,c])
    new_im = Image.fromarray(new_arr)

        return(new_im)
    

    if name == “main”:
    input_images = np.zeros((300, 300))
    im = imread(‘E:\mmn\ssz.jpg’)
    plt.subplot(121)
    plt.imshow(im)
    out_img = MedianFilter(im)
    plt.subplot(122)
    plt.imshow(out_img)
    plt.show()
    在这里插入图片描述

    关于中值滤波的简介部分摘抄自:https://editor.csdn.net/md?articleId=107591477

    展开全文
  • 中值滤波中值滤波是比较常用的一种图像平滑处理方法。其基本思路是通过滤波器遍历图像,取滤波器区域像素值中值为新的像素值。表示为数学表达式如下:其中,f(x,y)和g(x,y)分别是原图像和处理后图像,(x,y),(s,t)均...

    中值滤波

    中值滤波是比较常用的一种图像平滑处理方法。其基本思路是通过滤波器遍历图像,取滤波器区域像素值中值为新的像素值。表示为数学表达式如下:53bb215ee86a2569b9439b6624bf1145.png其中,f(x,y)g(x,y)分别是原图像和处理后图像,(x,y),(s,t)均为像素点坐标。如果是(3*3)的模板,就是对这3*3个像素点的值进行排序,(x,y)取值为排序之后的中值。可以用opencv自带的函数medianBlur()实现中值滤波,代码如下:b4719bdaf52971476343a8e504ecd493.png其运行结果如下,左图为加了噪声的原图,右图为中值滤波后的图。

    a0d3851c33dd62b90c55e0e3fa692d87.png

    从上图可看出,中值滤波可以有效地消除噪声,并且相对于均值滤波,它能够更好地保护边缘信息,图像的视觉效果更好。当然,也可以逐像素点对图像进行运算,来求得中值并进行赋值,代码如下图所示:e40ba794dcf9d39bde2e435e50b672bd.png代码中用到了自定义的函数如下:48bf88881b19e81da2aad3fa04009427.png其中paixu()是对序列a进行从大到小的排序,median()是求序列a的中值,twotoone()是将列表从二维降到一维,这三个自定义的函数的目的都是为了求中值。可能有更好的办法,只是我没有找到python或者numpy中自带的求中值的函数,只能自己写了。其运行结果如下:

    41a70202fce5132b44b48d5d665749ce.png

    展开全文
  • 为什么要使用滤波消除...如下图,左图带有椒盐噪声,右图为使用中值滤波处理后的图片。图像滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;另一个是为适应图像处理的要求,消除图像数字化时所混入的噪...
  • 图片预处理中重要一环就是椒盐去澡,通常用到中值滤波进行处理,效果很好。直接上代码:import numpy as np import cv2 import tensorflow as tf from PIL import Image import os import scipy.signal as signal ...
  • 我在这个论坛上看到了一些关于应用移动窗口中值滤波的讨论,但我的应用程序有一个特殊之处。在我有一个三维数组的维数750x12000x10000,我需要应用中值滤波器来生成一个二维数组(12000x10000)。为此,每个中值计算应...
  • 中值滤波器是一种非线性滤波器,其基本原理是把数字图像中某点的值用其领域各点值的中值代替。如求点[i,j]的灰度值计算方法为:(1)按灰度值顺序排列[i,j]领域中的像素点;(2)取排序像素集的中间值作...
  • 今天小编就为大家分享一篇Python 实现中值滤波、均值滤波的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Blurs an image using the median filter.C++:voidmedianBlur(InputArraysrc, OutputArraydst, intksize)Python:cv2.medianBlur(src, ksize[, dst])→ dstParameters:src– input 1-, 3-, or 4-channel image;...
  • 今天小编就为大家分享一篇Python实现中值滤波去噪方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Python中ImageFilter模块提供了滤镜功能,它可以被用来建立图像特效,也可以将此效果作为中间结果进行进一步处理。因此在图像识别领域,滤镜功能也是不可或缺的。ImageFilter模块中常用的滤镜主要有:BLUR #模糊滤镜...
  • copy_med) io.imshow(im_copy_mea) io.imsave(str(meaStep) + 'mea.jpg', im_copy_mea) Button(root, text="filterGo", command = on_click).pack() root.mainloop() 运行结果截图: 以上这篇Python 实现中值滤波、...
  • 一. 中值滤波: 中值滤波器是一种可以使图像平滑的滤波器。... python实现中值滤波和均值滤波,并用两种滤波器对受到椒盐噪声污染的图像进行去噪 import cv2 import numpy as np # Median fil...
  • 前言在进行图像空域处理时,对于椒盐噪声的图像,中值滤波是一个很不错的选择,一般来说mask有矩形 椭形 和十字形,十字形被认为在处理含有少数尖锥基元的图像更能保证尖锥的形状,由于没找到Matlab自带的函数库实现...
  • 素描作为一种近乎完美的表现手法有其独特的魅力,随着数字技术的发展,素描早已不再是专业绘画师的专利,今天这篇文章就来讲一讲如何使用python批量获取小姐姐素描画像。文章共分两部分:第一部分介绍两种使用python...
  • 素描作为一种近乎完美的表现手法有其独特的魅力,随着数字技术的发展,素描早已不再是专业绘画师的专利,今天这篇文章就来讲一讲如何使用python批量获取小姐姐素描画像。文章共分两部分:第一部分介绍两种使用python...
  • 素描作为一种近乎完美的表现手法有其独特的魅力,随着数字技术的发展,素描早已不再是专业绘画师的专利,今天这篇文章就来讲一讲如何使用python批量获取小姐姐素描画像。文章共分两部分:第一部分介绍两种使用python...
  • Python实现中值滤波去噪

    千次阅读 2019-06-04 21:45:12
    中值滤波器去噪:中值滤波的主要原理是将数字图像中的某点用该点的邻域中各个像素值的中值所来代替,这样就能让目标像素周围能够更好的接近真实值,比如一张白纸上有一个黑点时,黑点的像素值比较大,经过中值滤波...
  • 我不熟悉OpenCV和Python。...可以任何人请解释如何用Python在OpenCV中对噪声图像执行中值滤波。以下是我的代码:import numpy as npimport cv2img = cv2.imread('lizard.jpg').astype(np.float32)gaussian_bl...
  • 作者 | 杨秀璋,责编 | 夕颜 头图 | CSDN付费下载自视觉中国出品 | CSDN博客本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波、方框滤波、高斯滤波和中值滤波。全文均是基础知识,希望对您...
  • Python 实现中值滤波、均值滤波

    万次阅读 2017-10-17 14:44:47
    Python图形界面实现中值滤波、均值滤波Lena椒盐噪声图片: # -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017@author: Don """from tkinter import * from skimage ...
  • 图像平滑处理就是图像...中值滤波是一种非线性滤波器,常用于消除图像中的椒盐噪声。与低通滤波不同的是,中值滤波有利于保留边缘的尖锐度,但它会洗去均匀介质区域中的纹理。在做为去除相机噪声点的一种方法,还有...
  • 本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波、方框滤波、高斯滤波和中值滤波。全文均是基础知识,希望对您有所帮助。知识点如下: 1.图像平滑 2.均值滤波 3.方框滤波 4.高斯滤波 5.中值...
  • 前言在进行图像空域处理时,对于椒盐噪声的图像,中值滤波是一个很不错的选择,一般来说mask有矩形 椭形 和十字形,十字形被认为在处理含有少数尖锥基元的图像更能保证尖锥的形状,由于没找到Matlab自带的函数库实现...
  • 在进行图像空域处理时,对于椒盐噪声的图像,中值滤波是一个很不错的选择,一般来说mask有矩形 椭形 和十字形, 十字形被认为在处理含有少数尖锥基元的图像更能保证尖锥的形状,由于没找到Matlab自带的函数库实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 507
精华内容 202
关键字:

python中值滤波

python 订阅