中值滤波

基于记忆性的中值滤波O(r)与O(1)复杂度的算法实现

南楼画角 提交于 2019-12-01 06:16:21
   本文参考博客: https://www.cnblogs.com/Imageshop/archive/2013/04/26/3045672.html   原生的中值滤波是基于排序算法的,这样的算法复杂度基本在O(r 2 )左右,当滤波半径较大时,排序算法就显得很慢。对此有多种改进算法,这里介绍经典 的Huang算法与O(1)算法,两者都是基于记忆性的算法,只是后者记性更强。   排序算法明显的一个不足之处就是无记忆性。当核向右移动一列后,只是核的最左和最右列数据发生了变化,中间不变的数据应当被存储起来,而排序算法 并没有做到这点。Huang算法的思想是建立一个核直方图,来统计核内的各灰度的像素数。当核向右移动时,就将新的一列所有数据加入到直方图中,同时将最 左列的旧数据从直方图中删除,如下图所示。这样做使得大部分数据能够被记忆,减少重复操作。当直方图更新完毕后,就可以通过从左到右累计像素来找到中值。                  下面是算法具体实现步骤与代码:   1.每行开始都将直方图、像素计数、中值变量清零,将核覆盖的所有像素加到直方图中。   2.计算中值,sumcnt为小于中值灰度的像素数和。如果当前sumcnt大于等于阈值,则表明,实际中值比当前median小,则直方图向左减去像素数,同时median    也减小,直到sumcnt小于阈值

Matlab图像处理——中值滤波medfilt2问题解决

泪湿孤枕 提交于 2019-11-30 16:43:49
本文链接:https://blog.csdn.net/Pxzly1117/article/details/79201772 程序: I=imread('13.jpg');%读入图像 imshow(I); h=imnoise(I,'salt & pepper');%为I图片叠加椒盐噪声噪声 figure;imshow(h); w=[1 2 1;2 4 2;1 2 1]/16;%高斯模板 I5=imfilter(h,w,'corr','replicate');%高斯平滑 figure;imshow(I5); w=[1 1 1;1 1 1;1 1 1]/9;%平均模板 I7=imfilter(h,w,'corr','replicate');%平均平滑 figure;imshow(I7); I9=medfilt2(h,[3,3]);%中值滤波 figure;imshow(I9); 出现错误: 问题: 中值滤波medfilt2,用法是B = medfilt2(A, [m n]),输入图像A应是二维矩阵,程序中输入图像h是由imread得到的I加上噪声得到的,而imread读到的图像I通常是3维RGB图,是三维矩阵,因此才出现问题,显示A应该为二维的。 解决方法: 先用rgb2gray(I)将h先将I图像转换为灰度矩阵图像,再用medfilt2。 程序后段改为: j=rgb2gray(I);

几种常见空间滤波器MATLAB实现

孤者浪人 提交于 2019-11-30 16:32:29
本文链接:https://blog.csdn.net/LYduring/article/details/80443573 一、目的 实现算术均值滤波器、几何均值滤波器、中值滤波器、修正的阿尔法均值滤波器、自适应中值滤波器,并比较不同滤波器的降噪结果。 二、代码 代码的思路如下: (1)先对原始的电路图先后进行加高斯噪声和椒盐噪声;之后设置滤波器的模板大小为5*5,分别对被噪声污染的图像进行算术均值、几何均值、中值、修正的阿尔法滤波,并输出图像,方便结果比较。 (2)为了比较中值滤波器和自适应中值滤波器的滤波结果,先对原始电路图添加椒盐噪声;接着对噪声图像进行模板大小为5*5的中值滤波;最后对噪声图像进行最大模板为5*5的自适应中值滤波,分别输出滤波后的图像,比较结果。 代码具体实现如下: %******************************************************% %目的:比较几种不同均值滤波器和自适应中值滤波器的去噪声效果 %日期:2018.5.18 %******************************************************% %读入图像 img = imread('img.tif'); figure; subplot(1,3,1); imshow(img); title('原始图像');

滤波器—学习笔记

丶灬走出姿态 提交于 2019-11-28 08:12:24
文章目录 空间滤波 中值滤波(Median Filter) 自适应中值滤波器(Adaptive Median Filter) 均值滤波 算术均值滤波器(Arithmetic Mean Filter) 盒状滤波器 加权的均值滤波器 非线性均值滤波器 几何均值滤波器(Geometric Mean Filter) 谐波均值滤波器(Harmonic Mean Filter) 逆谐波均值滤波器(Contra-Harmonic Mean Filter) 参考资料 空间滤波 一个滤波器就是在选定的领域像素上执行预定义好的操作产生新的像素,并用新的像素替换掉原来像素形成新的图像。 一个空间滤波器包括两个部分: 一个领域,滤波器进行操作的像素集合,通常是一个矩形区域 对领域中像素进行的操作 通常可以将滤波器称之为核(kernel)、模板(template)或者窗口(window)。 根据预定义的操作,可以将滤波器分为: 线性滤波器 非线性滤波器 根据滤波器最终对图像造成的影响,可以将滤波器分为: 平滑滤波器,通常用于模糊图像或者去除图像中的噪声。 锐化滤波器,突出图像中的边缘细节部分。 中值滤波(Median Filter) 分类 非线性滤波器 原理 选择待处理像素的一个领域中的各像素值的中值来代替待处理的像素。 功能 消除孤立噪声点(像素的灰度值与周围像素比较接近),特别是椒盐噪声。 优点

中值滤波器(平滑空间滤波器)基本原理及Python实现

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-27 22:17:42
1. 基本原理 一种典型的非线性滤波器就是中值滤波器,它使用像素的一个领域内的灰度的中值来代替该像素的值。中值滤波器通常是 处理椒盐噪声 的一种有效的手段。 2. 测试结果 图源自skimage 3. 代码 1 import numpy as np 2 3 def median_filter(input_image, filter_size): 4 ''' 5 中值滤波器 6 :param input_image: 输入图像 7 :param filter_size: 滤波器大小 8 :return: 输出图像 9 10 注:此实现滤波器大小必须为奇数且 >= 3 11 ''' 12 input_image_cp = np.copy(input_image) # 输入图像的副本 13 14 pad_num = int((filter_size - 1) / 2) # 输入图像需要填充的尺寸 15 16 input_image_cp = np.pad(input_image_cp, (pad_num, pad_num), mode="constant", constant_values=0) # 填充输入图像 17 18 m, n = input_image_cp.shape # 获取填充后的输入图像的大小 19 20 output_image = np.copy(input

ITK学习笔记——中值滤波和均值滤波

风格不统一 提交于 2019-11-27 02:18:27
均值滤波和和中值滤波都可以起到平滑图像,虑去噪声的功能。 均值滤波采用线性的方法,平均整个窗口范围内的像素值,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。均值滤波对高斯噪声表现较好,对椒盐噪声表现较差。 中值滤波采用非线性的方法,它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,所以处理效果好,对椒盐噪声表现较好,对高斯噪声表现较差。 中值滤波: #include "itkImage.h" #include "itkImageFileReader.h" #include "itkMedianImageFilter.h" #include "itkSubtractImageFilter.h" #include "itksys/SystemTools.hxx" #include <sstream> #include "QuickView.h" int main(int argc, char * argv[]) { std::string inputFilename = "C:/input/Lenna.jpeg"; typedef itk::Image<float, 2 > ImageType; typedef itk::ImageFileReader