精华内容
下载资源
问答
  • 14. (3 分)另一种中值滤波的做法是:首先按行对图像做一维中值滤波(1 × 3),然后对结果再按列做一维中值滤波(3 × 1)。这种做法与直接做3 × 3中值滤波的结果是一样的吗?请解释,并举例说明。 代码 # -*- ...

    题目

    1. (3 分)另一种中值滤波的做法是:首先按行对图像做一维中值滤波(1 × 3),然后对结果再按列做一维中值滤波(3 × 1)。这种做法与直接做3 × 3中值滤波的结果是一样的吗?请解释,并举例说明。

    代码

    # -*- coding: utf-8 -*-
    # @Time : 2021/4/15 22:01
    # @Author : Zhang Jun
    # @File : main.py
    # @Software: PyCharm
    
    import random
    import numpy as np
    import scipy.signal as signal
    
    # 随机生成4*4矩阵
    # x = np.random.randint(1, 100, (4, 4))
    x = np.array([[46, 31, 78, 53],
                  [67, 14, 56, 23],
                  [65, 44, 3, 29],
                  [60, 49, 36, 12]])
    # 先对行进行一维中值滤波(1*3)
    x1 = []
    for i in range(4):
        a = signal.medfilt(x[i], 3)
        x1.append(a)
    x1 = np.array(x1)
    
    # 再对列进行一维中值滤波(3*1)
    x2 = []
    for i in range(4):
        a = signal.medfilt(x1[:, i], 3)
        x2.append(a)
    x2 = np.array(x2).T
    
    # 直接做3*3中值滤波
    x3 = signal.medfilt(x,(3,3))
    
    
    随机生成的矩阵如下:
    

    在这里插入图片描述

    首先按行对图像做一维中值滤波(1 × 3),然后对结果再按列做一维中值滤波(3 × 1)。
    

    在这里插入图片描述

    直接做3 × 3中值滤波的结果
    

    在这里插入图片描述

    其中,边界滤波时默认补0
    可见结果是不一样的
    
    展开全文
  • 一维中值滤波.

    2012-05-15 10:34:50
    一维中值滤波.给你个程序参考,中值滤波效果不一定好,你可以依据你的数据进行改进
  • 一维中值滤波函数,调用函数,输入滤波窗口值和初始一维滤波向量,输出滤波后的向量
  • 一维维中值滤波均值滤波matlab编码实现
  • 一维维中值滤波均值滤波matlab编码实现
  • MedianFilter:一种快速的一维中值滤波算法
  • python的中值滤波使用起来,不如matlab的方便。matlab直接能对数组进行滤波,只需要传入数据和窗宽就行。python的中值滤波函数对数组的数要求严格,打个比方你用维数为(20

    python的中值滤波使用起来,不如matlab的方便。matlab直接能对数组进行滤波,只需要传入数据和窗宽就行。python的中值滤波函数对数组的维数要求严格,打个比方你用维数为(200,1)的数组当输入,不行!!!!!!!!!!!!!!

    必须改成(200,)这样的玩意,它才会给你滤波。

    以下是具体示例。

    En1=En.reshape(En.size,1)
    y = signal.medfilt(En1, kernel_size=5)

    比如上面的代码,En1的维数你设计成(118,1);那么运行以后就是下面的报错信号:

    而且,得到的结果全是0填充的玩意。

    改成以下的代码就能正常运行了。

    En1=En.reshape(En.size)
    y = signal.medfilt(En1, kernel_size=5)

    就是把reshape 里的第二个参数,1,给去掉就OK了。

    你的En1必须是下面这样的矩阵维数:

    matlab转python还是各种不习惯啊,在这记录下踩坑的教训,嗨,。。。。。。。

     

    展开全文
  • 种快速的二维中值滤波算法及其硬件实现。论文。
  • 2020-08-28 04:17:42来源:脚本之家阅读:105中值滤波器去噪:中值滤波的主要原理是将数字图像中的某点用该点的邻域中各个像素值的中值所来代替,这样就能让目标像素周围能够更好的接近真实值,比如一张白纸上有个...

    Python实现中值滤波去噪方式

    发布时间:2020-08-28 04:17:42

    来源:脚本之家

    阅读:105

    中值滤波器去噪:

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

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

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

    实现代码如下:

    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()

    效果图:

    17064.jpg

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

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

    展开全文
  • 图形学-降噪技术-2维中值滤波

    千次阅读 2008-01-25 13:53:00
    维中值滤波就是其中种方法。 中值滤波是种局部图像平滑技术,属于非线性滤波,他可以是1维的也可以是2维的,因为图像是2维象素矩阵,所以这里使用2维中值滤波。 2维中值滤波算法是: 对于幅图像的象素矩阵,...
    导读: 
    
      在图像采集过程中,由于电子设备的不稳定性(比如毛刺电压,电磁干扰等)会对获取的图像产生一些影响,这种影响叫噪声,降噪技术就是图像处理中消除这种噪声影响的技术。二维中值滤波就是其中一种方法。
      中值滤波是一种局部图像平滑技术,属于非线性滤波,他可以是1维的也可以是2维的,因为图像是2维象素矩阵,所以这里使用2维中值滤波。
      2维中值滤波算法是:
      对于一幅图像的象素矩阵,取以目标象素为中心的一个子矩阵窗口,这个窗口可以是3*3 ,5*5 等根据需要选取,对窗口内的象素灰度排序,取中间一个值作为目标象素的新灰度值。
      窗口示例如
      ooo
      oxo
      ooo
      上面x为目标象素,和周围o组成3*3矩阵Array,然后对这9个元素的灰度进行排序,以排序后的中间元素Array[4]为x的新灰度值,如此就完成对象素x的中值滤波,再迭代对其他需要的象素进行滤波即可。
      下面根据这个理论用BCB6实现中值滤波算法
      //--------------------------------BCB6程序
      #include
      #pragma hdrstop
      #include
      #include "Unit1.h"
      #include"File1.h"
      #pragma pack(1)
      /*
      程序:图形学-中值滤波
      作者:sboom(Lingch)
      日期:12月26日
      */
      //BMP文件头
      struct BITMAPFILEHEADER_
      {
      short type;
      int bfSize;
      short re1,re2;
      int Offbits;
      };
      //BMP信息头
      struct BITMAPINFO_
      {
      long size;
      long width,height;
      short planes,bitCount;
      long comp,sizeImg;
      long xpels,ypels;
      long used,important;
      };
      //BMP彩色表项
      struct COLOR_
      {
      char blue,green,red;
      };
      //------将BMP彩色表的数据校正到BCB TColor的数据。
      TColor* SwitchColor(unsigned char r,unsigned char g,unsigned char b)
      {
      TColor *re=new TColor;
      *re=(r | g<<8 | b<<16 );
      *re=*re &0x00ffffff;
      return re;
      }
      void xxx()
      {
      FILE *f=fopen("f://7.bmp","rb");
      if(f==NULL) /*判断文件是否打开成功*/
      {
      ShowMessage("File open error");
      return;
      }
      fseek(f,0,0);//移动到开头
      //----------读BMP文件头
      BITMAPFILEHEADER_ *bmph=new BITMAPFILEHEADER_();
      if(fread((char*)bmph,sizeof(BITMAPFILEHEADER_),1,f)==NULL)
      {
      ShowMessage("File read error");
      return;
      }
      //-----------读BMP信息头
      BITMAPINFO_ *bmpi=new BITMAPINFO_();
      if(fread((char*)bmpi,sizeof(BITMAPINFO_),1,f)==NULL)
      {
      ShowMessage("File read error2");
      return;
      }
      fseek(f,bmph->Offbits,0);
      //----------显示一些信息
      Form1->Edit1->Text=IntToStr(bmph->bfSize);
      Form1->Edit2->Text=IntToStr(bmpi->width);
      Form1->Edit3->Text=IntToStr(bmpi->height);
      Form1->Edit4->Text=IntToStr(bmpi->comp);
      Form1->Edit5->Text=IntToStr(bmpi->used);
      int i,j,k,l,wc,pos;
      long N=bmph->bfSize- bmph->Offbits;//象素总数
      COLOR_ *image=new COLOR_[N]; //位图矩阵
      COLOR_ *newimage=new COLOR_[N];//滤波后的位图矩阵
      fread(image,N*3,1,f);//读入位图矩阵
      //---------先COPY不处理的原图像第一行,因为第一行无法取窗口
      memcpy((void*)newimage,(void*)image,(bmpi->width+1)*3);
      //--!!!!!!!!!!!!!!下面开始窗口为3×3中值滤波!!!!!!!!!!!!!!!!
      int ns=bmpi->width+1; //开始处理的起点
      int ne=N-bmpi->width-2; //开始处理的终点
      unsigned char *psr=new unsigned char[9]; //红色窗口
      unsigned char *psg=new unsigned char[9]; //绿色窗口
      unsigned char *psb=new unsigned char[9]; //蓝色窗口
      unsigned char temp;
      COLOR_ cc;
      for(i=ns;i<=ne;i++)
      {
      //---------红色窗口
      //---3*3窗口矩阵第一行
      psr[0]=image[i-bmpi->width+1].red ;
      psr[1]=image[i-bmpi->width+1].red;
      psr[2]=image[i-bmpi->width+1].red;
      //---3*3窗口矩阵第二行
      psr[3]=image[i-1].red;
      psr[4]=image[i].red;
      psr[5]=image[i+1].red;
      //---3*3窗口矩阵第三行
      psr[6]=image[i+bmpi->width-1].red;
      psr[7]=image[i+bmpi->width].red;
      psr[8]=image[i+bmpi->width+1].red;
      //---------绿色窗口
      //---3*3窗口矩阵第一行
      psg[0]=image[i-bmpi->width+1].green ;
      psg[1]=image[i-bmpi->width+1].green;
      psg[2]=image[i-bmpi->width+1].green;
      //---3*3窗口矩阵第二行
      psg[3]=image[i-1].green;
      psg[4]=image[i].green;
      psg[5]=image[i+1].green;
      //---3*3窗口矩阵第三行
      psg[6]=image[i+bmpi->width-1].green;
      psg[7]=image[i+bmpi->width].green;
      psg[8]=image[i+bmpi->width+1].green;
      //---------蓝色窗口
      //---3*3窗口矩阵第一行
      psb[0]=image[i-bmpi->width+1].blue ;
      psb[1]=image[i-bmpi->width+1].blue;
      psb[2]=image[i-bmpi->width+1].blue;
      //---3*3窗口矩阵第二行
      psb[3]=image[i-1].blue;
      psb[4]=image[i].blue;
      psb[5]=image[i+1].blue;
      //---3*3窗口矩阵第三行
      psb[6]=image[i+bmpi->width-1].blue;
      psb[7]=image[i+bmpi->width].blue;
      psb[8]=image[i+bmpi->width+1].blue;
      //--------选择排序
      for(j=0;j<9;j++)
      {
      //-----------红色排序
      pos=j;
      for(k=j;k<9;k++)
      {
      if(psr[k]
      pos=k;
      }
      temp=psr[j];
      psr[j]=psr[pos];
      psr[pos]=temp;
      //--------------绿色排序
      pos=j;
      for(k=j;k<9;k++)
      {
      if(psg[k]
      pos=k;
      }
      temp=psg[j];
      psg[j]=psg[pos];
      psg[pos]=temp;
      //--------------蓝色排序
      pos=j;
      for(k=j;k<9;k++)
      {
      if(psb[k]
      pos=k;
      }
      temp=psb[j];
      psb[j]=psb[pos];
      psb[pos]=temp;
      }
      //------取中值
      newimage[i].red=psr[4];
      newimage[i].green=psg[4];
      newimage[i].blue=psb[4];
      }
      //!!!!!!!!!!!滤波完毕,COPY无法滤波的最后一行,因为最后一行无法取窗口!!!!!!!
      memcpy((void*)&image[ne+1],(void*)&image[ne+1],(bmpi->width+1)*3);
      //------显示图形
      COLOR_ color;
      TColor *tc;
      if(bmpi->width%4==0)//-----------因为BMP图像4字节对齐
      wc=bmpi->width/4*4;
      else
      wc=(bmpi->width/4+1)*4;
      pos=0;
      for( i=0;i height;i++)
      {
      for(j=0;j
      {
      //-----原始图形
      color=image[pos];
      tc=SwitchColor(color.red,color.green,color.blue);
      Form1->Canvas->Pixels[10+j][600-i]=*tc;
      //------新图形
      color=newimage[pos];
      tc=SwitchColor(color.red,color.green,color.blue);
      Form1->Canvas->Pixels[400+j][600-i]=*tc;
      pos++;
      }
      }
      fclose(f);
      }
      //-------------------------------------------------------------------------
      经过实际运行证实,中值滤波能有效去除图像中的噪声点,特别是在一片连续变化缓和的区域中(比如人的衣服,皮肤),几乎100%去除灰度突变点(可以认为是噪声点),也因为如此,中值滤波不适合用在一些细节多,如细节点,细节线多的图像中,因为细节点有可能被当成噪声点去除。
      中值滤波的窗口还可以有多种形状,上面程序选择的是矩形(容易计算),其实窗口还可以是菱形,圆形,十字形等等,不同的窗口形状有不同的滤波效果,对有缓慢且有较长轮廓线的物体适合用矩形或者原型窗口,对于有尖顶角物体的图像适合采用十字形窗口。
      中值滤波可以进行线性组合,不同窗口形状的滤波器可以线性组合
      g(x,y)=E{k=1,n}ak*medk(f(x,y)) 编辑关系,左式E{k=1,n}表示下标k从1到n连加符号,ak是各滤波器权值系数,med是滤波器函数。其实就是象素灰度通过所有滤波器再相加,各滤波器权值ak的和应该=1。
      中值滤波同时伴随着模糊化效果。

    本文转自
    http://3pcode.com/code/2006/09/80704.htm
    展开全文
  • 中值滤波器去噪:中值滤波的主要原理是将数字图像中的某点用该点的邻域中各个像素值的中值所来代替,这样就能让目标像素周围能够更好的接近真实值,比如一张白纸上有个黑点时,黑点的像素值比较大,经过中值滤波...
  • 快速中值滤波及c语言实现 学生姓名:刘勇学号: 6100410218 专业班级:数媒101 【摘要】本文讨论了用c语言在微机上实现中值滤波及快速算法,在程序设计的过程中充分考虑到程序运行的时间复杂度和空间复杂度的问题....
  • 中值滤波是基于排序统计理论的种能有效抑制噪声的非线性信号处理技术,中值滤波基本原理是把数字图像或数字序列中一点的值用该点的个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声...
  • 快速二维中值滤波算法的实现(灰度+RGB图)摘要算法流程及伪代码算法流程伪代码程序代码 摘要 本文主要完成对 Thomas S Huang, George J Yang, and Gregory J Yang. A Fast Two-Dimensional Median Filtering ...
  • 1、什么是中值滤波中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐...以一维信号的中值滤波举例。对灰度序列80、120、9...
  • 中值滤波是基于排序统计理论的种能有效抑制噪声的非线性信号处理技术,中值滤波基本原理是把数字图像或数字序列中一点的值用该点的个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声...
  • 文章目录中值滤波介绍opencv自带的中值滤波函数简单算法实现中值滤波快速算法实现中值滤波 中值滤波介绍 中值滤波介绍 中值滤波定义:将????(????为奇数)个数据按其值????????进行从大到小或者从小到大排列后得到...
  • 中值滤波原理及MATLAB算法实现

    万次阅读 2017-04-11 18:00:50
    对于一维中值滤波,设模板的尺寸为 M ,M=2*r+1,r为模板半径,给定一维信号f(i),i = 1,2,3……N,则中值滤波输出为: g(i) = median[ f(j-r),f(j-r+1),…………,f(j),f(j+r)]。 对于二维的中值滤波情况,g...
  • 中值滤波原理

    万次阅读 2017-08-10 10:47:13
    数字图像在其形成、传输记录的过程中往往会受到很多噪声的的污染,比如:椒盐噪声、高斯噪声等...中值滤波是图像平滑的种方法 它是种非线性平滑滤波技术,在一定条件下可以克服线性滤波带来的图像细节的模糊问题,
  • 原图 + 自己手写的中值滤波 + OpenCV的中值滤波. 肉眼参看非常的接近.但效率上仍然无法与OpenCV匹敌.个天上个地下.以学习的目的进行手写. 原理比较简单,对消除椒盐噪点效果是非常的好.上面的图就是个充满了...
  • 本文主要是对高斯滤波,中值滤波原理进行简单介绍,随后用代码实现高斯噪声和椒盐噪声。以及用高斯滤波和中值滤波对这两种图像进行相关的处理。 高斯噪声:就是服从高斯正态分布的噪声,通常是因为高温或者是传感器...
  • 中值滤波Verilog代码

    2019-08-28 00:15:57
    中值滤波verilog.rar 中值滤波Verilog代码 verilog , 中值滤波

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,304
精华内容 2,121
关键字:

一维中值滤波的基本原理