`
luoweifu
  • 浏览: 63389 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

图像噪声的抑制——均值滤波、中值滤波、对称均值滤波

 
阅读更多


概述

噪声对图像处理的影响很大,它影响图像处理的输入、采集和处理等各个环节以及输出结果。因此,在进行其它的图像处理前,需要对图像进行去噪处理。

从统计学的观点来看,凡是统计特征不随时间变化的噪声称为平稳噪声,而统计特征随时间变化的噪声称为非平稳噪声。幅值基本相同,但是噪声出现的位置是随机的,称为椒盐噪声;如果噪声的幅值是随机的,根据幅值大小的分布,有高斯型和瑞利型两种,分别称为高斯噪声瑞利噪声。由于去除噪声处理的原理和方法很多,这里只给出了简单的描述和我自己已实现的几种方法的java源代码。

常见的去噪处理有均值滤波,中值滤波,灰度最小方差均值滤波,K近邻平滑滤波,对称近邻均值滤波,西戈玛平滑滤波等。

均值滤波

定义

均值滤波方法是,对待处理的当前像素,选择一个模板,该模板为其邻近的若干个像素组成,用模板的均值来替代原像素的值的方法。


如下图,1~8(x,y)的邻近像素。

权系数矩阵模板


g=(f(x-1,y-1)+f(x,y-1)+f(x+1,y-1)+f(x-1,y)+f(x,y)+f(x+1,y) +f(x-1,y+1)+f(x,y+1)+f(x+1,y+1))/9

方法优缺点

优点:算法简单,计算速度快;

缺点:降低噪声的同时使图像产生模糊,特别是景物的边缘和细节部分。

源代码

/**
	 * 均值滤波
	 * @param srcPath 图片的存储位置
	 * @param destPath 图像要保存的存储位置
	 * @param format 图像要保存的存储位置
	 */
	public static void avrFiltering(String srcPath,String destPath,  String format) {
		BufferedImage img = readImg(srcPath);
		int w = img.getWidth();
		int h = img.getHeight();
		int[] pix = new int[w*h];
		img.getRGB(0, 0, w, h, pix, 0, w);		
		int newpix[] = avrFiltering(pix, w, h);
		img.setRGB(0, 0, w, h, newpix, 0, w);
		writeImg(img, format, destPath);
	}
	/**
	 * 均值滤波
	 * @param pix 像素矩阵数组
	 * @param w 矩阵的宽
	 * @param h 矩阵的高
	 * @return 处理后的数组
	 */
	public static int[] avrFiltering(int pix[], int w, int h) {
		int newpix[] = new int[w*h];
		ColorModel cm = ColorModel.getRGBdefault();
		int r=0;
		for(int y=0; y<h; y++) {
			for(int x=0; x<w; x++) {
				if(x!=0 && x!=w-1 && y!=0 && y!=h-1) {
					//g = (f(x-1,y-1) + f(x,y-1)+ f(x+1,y-1)
					//  + f(x-1,y) + f(x,y) + f(x+1,y)
					//  + f(x-1,y+1) + f(x,y+1) + f(x+1,y+1))/9
					r = (cm.getRed(pix[x-1+(y-1)*w]) + cm.getRed(pix[x+(y-1)*w])+ cm.getRed(pix[x+1+(y-1)*w])
						+ cm.getRed(pix[x-1+(y)*w]) + cm.getRed(pix[x+(y)*w]) + cm.getRed(pix[x+1+(y)*w])
						+ cm.getRed(pix[x-1+(y+1)*w]) + cm.getRed(pix[x+(y+1)*w]) + cm.getRed(pix[x+1+(y+1)*w]))/9;
					newpix[y*w+x] = 255<<24 | r<<16 | r<<8 |r;
					
				} else {
					newpix[y*w+x] = pix[y*w+x];
				}
			}
		}
		return newpix;
	}


中值滤波


定义

中值滤波方法是,对待处理的当前像素,选择一个模板,该模板为其邻近的若干个像素组成,对模板的像素由小到大进行排序,再用模板的中值来替代原像素的值的方法。

权系数矩阵模板



g=median[(x-1,y-1)+f(x,y-1)+f(x+1,y-1) +f(x-1,y)+f(x,y)+f(x+1,y) +f(x-1,y+1)+f(x,y+1)+f(x+1,y+1)]


优缺点

优点:抑制效果很好,画面的清析度基本保持;

缺点:对高斯噪声的抑制效果不是很好。

源代码

/**
	 * 中值滤波
	* @param srcPath 图片的存储位置
	 * @param destPath 图像要保存的存储位置
	 * @param format 图像要保存的存储位置
	 */
	public static void medianFiltering(String srcPath, String destPath, String format) {
		BufferedImage img = readImg(srcPath);
		int w = img.getWidth();
		int h = img.getHeight();
		int[] pix = new int[w*h];
		img.getRGB(0, 0, w, h, pix, 0, w);		
		int newpix[] = medianFiltering(pix, w, h);
		img.setRGB(0, 0, w, h, newpix, 0, w);
		writeImg(img, format, destPath);
	}
	/**
	 * 中值滤波 
	 * @param pix 像素矩阵数组
	 * @param w 矩阵的宽
	 * @param h 矩阵的高
	 * @return 处理后的数组
	 */
	public static int[] medianFiltering(int pix[], int w, int h) {
		int newpix[] = new int[w*h];
		int[] temp = new int[9];
		ColorModel cm = ColorModel.getRGBdefault();
		int r=0;
		for(int y=0; y<h; y++) {
			for(int x=0; x<w; x++) {
				if(x!=0 && x!=w-1 && y!=0 && y!=h-1) {
					//g = median[(x-1,y-1) + f(x,y-1)+ f(x+1,y-1)
					//  + f(x-1,y) + f(x,y) + f(x+1,y)
					//  + f(x-1,y+1) + f(x,y+1) + f(x+1,y+1)]					
					temp[0] = cm.getRed(pix[x-1+(y-1)*w]); 
					temp[1] = cm.getRed(pix[x+(y-1)*w]);
					temp[2] = cm.getRed(pix[x+1+(y-1)*w]);
					temp[3] = cm.getRed(pix[x-1+(y)*w]);
					temp[4] = cm.getRed(pix[x+(y)*w]);
					temp[5] = cm.getRed(pix[x+1+(y)*w]);
					temp[6] = cm.getRed(pix[x-1+(y+1)*w]);
					temp[7] = cm.getRed(pix[x+(y+1)*w]);
					temp[8] = cm.getRed(pix[x+1+(y+1)*w]);
					Arrays.sort(temp);
					r = temp[4];
					newpix[y*w+x] = 255<<24 | r<<16 | r<<8 |r;
				} else {
					newpix[y*w+x] = pix[y*w+x];
				}
			}
		}
		return newpix;
	}

对称近邻均值滤波


定义

对称近邻(SNNSymmetricNearestNeighbor)均值滤波的核心思想是,在一个局部范围内,通过几对对称点像素的比较,获得相对区域及不同区域的差别,然后将均值计算在所判定的同一个区域内进行,这样可以使边界的保持更加灵活的同时又降低计算。

设一个(2N+1)*(2N+1)的模板,则有2N*(2N+1)个对称点,2N*(2N+1)个选择点的像素均值代替原像素值,如下:

优缺点

使边界的保持更加灵活的同时又降低计算。

源代码

/**
	 * 对称近邻均值滤波
	 * @param srcPath 图片的存储位置
	 * @param destPath 图像要保存的存储位置
	 * @param format 图像要保存的存储位置
	 */
	public static void snnFiltering(String srcPath, String destPath, String format) {
		BufferedImage img = readImg(srcPath);
		int w = img.getWidth();
		int h = img.getHeight();
		int[] pix = new int[w*h];
		img.getRGB(0, 0, w, h, pix, 0, w);		
		int newpix[] = snnFiltering(pix, w, h);
		img.setRGB(0, 0, w, h, newpix, 0, w);
		writeImg(img, format, destPath);
	}
	/**
	 * 对称近邻均值滤波
	 * @param pix 像素矩阵数组
	 * @param w 矩阵的宽
	 * @param h 矩阵的高
	 * @return 处理后的数组
	 */
	public static int[] snnFiltering(int pix[], int w, int h) {
		int newpix[] = new int[w*h];
		int n = 9;
		int temp, i1,i2, sum;
		int[] temp1 = new int[n];
		int[] temp2 = new int[n/2];
		ColorModel cm = ColorModel.getRGBdefault();
		int r=0;
		for(int y=0; y<h; y++) {
			for(int x=0; x<w; x++) {
				if(x!=0 && x!=w-1 && y!=0 && y!=h-1) {
					sum = 0;
					temp1[0] = cm.getRed(pix[x-1+(y-1)*w]); 
					temp1[1] = cm.getRed(pix[x+(y-1)*w]);
					temp1[2] = cm.getRed(pix[x+1+(y-1)*w]);
					temp1[3] = cm.getRed(pix[x-1+(y)*w]);
					temp1[4] = cm.getRed(pix[x+(y)*w]);
					temp1[5] = cm.getRed(pix[x+1+(y)*w]);
					temp1[6] = cm.getRed(pix[x-1+(y+1)*w]);
					temp1[7] = cm.getRed(pix[x+(y+1)*w]);
					temp1[8] = cm.getRed(pix[x+1+(y+1)*w]);
					for(int k=0; k<n/2; k++) {
						i1 = Math.abs(temp1[n/2] - temp1[k]);
						i2 = Math.abs(temp1[n/2] - temp1[n-k-1]);
						temp2[k] = i1<i2 ? temp1[k] : temp1[n-k-1];	//选择最接近原像素值的一个邻近像素
						sum = sum + temp2[k];
					}
					r = sum/(n/2);
					//System.out.println("pix:" + temp1[4] + "  r:" + r);
					newpix[y*w+x] = 255<<24 | r<<16 | r<<8 |r;
				} else {
					newpix[y*w+x] = pix[y*w+x];
				}
			}
		}
		return newpix;
	}


分享到:
评论

相关推荐

    一维二维中值滤波均值滤波matlab编码实现

    总的来说,一维和二维的中值滤波与均值滤波是信号和图像处理的基础工具。通过理解它们的工作原理和在MATLAB中的实现,你可以为各种应用定制适合的滤波方案,从而提升数据的质量。记得在实际项目中,根据噪声类型、...

    山东大学数字图像处理实验四:图像滤波

    在本实验中,我们将深入探讨数字图像处理领域中的两种重要滤波技术——高斯滤波与快速均值滤波。这些方法广泛应用于图像平滑、降噪以及特征提取等任务中。实验主要采用C++编程语言,并利用OpenCV库进行实现。 首先...

    一维中值滤波.

    需要注意的是,虽然中值滤波在去除噪声方面表现出色,但也会对图像边缘或信号突变点产生模糊效应。因此,在实际应用中,需要根据具体应用场景选择合适的滤波器类型和参数,以达到最佳的噪声去除效果。此外,对于某些...

    image.rar_ImageJ滤波实现_相关滤波

    总结来说,相关滤波是图像处理中的重要技术,它可以用于多种目的,如噪声抑制、边缘检测等。在ImageJ中,用户可以通过内置的滤波器或自定义脚本来实现相关滤波,从而对图像进行精确控制。通过深入理解滤波器的性质和...

    opencv+python实现均值滤波

    处理后的图像清晰地展示了均值滤波对噪声的抑制效果,但可能会牺牲一些图像的细节。 需要注意的是,均值滤波虽然简单且计算速度快,但它并不适合处理高对比度的边缘或者保持图像细节。在某些情况下,更适合使用中值...

    opencv中值、高斯、均值、双边滤波

    本教程主要探讨四个重要的滤波器:中值滤波、高斯滤波、均值滤波和双边滤波,它们在图像去噪和平滑处理方面扮演着关键角色。 **1. 中值滤波** 中值滤波是一种非线性的滤波方法,适用于消除椒盐噪声。它将图像窗口内...

    数字图像处理实验三 图像滤波实验(模板运算).docx

    `medfilt2`函数用于二维中值滤波,它使用邻域内的中值来替代当前像素值,对噪声有很好的抑制作用。实验比较了默认边界填充('zeros')和镜像反射方式对称填充('symmetric')的效果。 **预定义的线性空间滤波器** ...

    数字图像处理实验报告.doc

    同时,比较均值滤波与中值滤波在去除椒盐噪声方面的差异,并鼓励学生自行设计平滑滤波器进行实践。 其次,锐化空间滤波用于增强图像细节。实验中,3x3的拉普拉斯算子被用于对图像进行初步的滤波处理。通过编写`...

    结合局域均值分解的多尺度中值滤波

    《结合局域均值分解的多尺度中值滤波在遥测信号脉冲噪声抑制中的应用》 在电子设计工程领域,特别是在飞行器试验的遥测信号处理中,脉冲噪声是一个常见且严重的问题。这种噪声严重影响信号的时域和频域特性分析,...

    实验3-图像噪声去除1

    在实验中,你需要使用MATLAB的`imnoise`函数生成含有高斯噪声或椒盐噪声的图像,然后应用`medfilt2`(中值滤波)和`filter2`(一般滤波,可用于均值滤波)对噪声图像进行滤波。此外,还需要自己编写`KNN_denoise`和`...

    数字图像处理之图像增强处理.pdf

    然而,对于椒盐噪声,非线性滤波如中值滤波更为有效,它能保护图像边缘,因为中值滤波会忽略异常值(如噪声点)。MATLAB的`medfilt2()`函数提供了二维中值滤波功能。自适应中值滤波是一种改进策略,它可以根据图像...

    数字图像处理实验指导书matlab冈萨雷斯.pdf

    3. **平滑处理**:平滑处理用于消除图像噪声,包括均值滤波和中值滤波。均值滤波是用模板内像素的平均值替换中心像素,而中值滤波则使用模板内像素的中值。 4. **拉普拉斯锐化**:拉普拉斯算子是一种边缘检测算子,...

    高斯平滑滤波

    1. **空域滤波**:直接对图像数据进行操作,如均值滤波、中值滤波等。 - **线性滤波**:通过计算像素邻域内的加权平均值,其中高斯滤波是一种典型的线性滤波方法。 - **非线性滤波**:如中值滤波、边缘保持滤波等...

    功能齐全的图像处理程序

    平滑滤波器通过模糊图像来消除噪声,常见的有均值滤波、高斯滤波和中值滤波。均值滤波是最简单的平均化操作,它用像素邻域的平均值替换中心像素;高斯滤波则采用高斯函数作为权重,能更好地保留边缘信息;中值滤波...

    邻域滤波算法

    - **中值滤波**:不采用平均值,而是取邻域内像素值的中位数,特别适用于去除椒盐噪声。 ### 4. 应用场景 邻域滤波广泛应用于各种图像处理任务,如: - **降噪**:通过平滑处理消除图像中的噪声。 - **图像平滑**...

    关于数字图像处理的小程序

    常见的方法包括均值滤波、高斯滤波和中值滤波。均值滤波是最简单的平滑方法,用像素邻域的平均值替换该像素的值;高斯滤波则使用高斯核进行卷积,能更好地保持边缘;中值滤波特别适用于去除椒盐噪声,它将像素替换为...

    数字图像处理期末考试整理

    - **统计排序滤波器**:例如中值滤波器,特别适用于去除椒盐噪声。 - 使用邻域内像素值的中位数替代原像素值。 - 适用于去除噪声,但可能不适合细节丰富的图像。 - **锐化空间滤波器**:增强图像边缘,提高图像...

    实验二 数字图像增强与恢复技术

    实验目的: 1、掌握图像基本几何变换,了解基本的图象增强方法。 2、掌握数字图像灰度映射的几种方法...8. 编程实现图像的空域平滑,包括均值滤波和中值滤波。对上一题的结果进行去噪。要求:模板的大小可以选择。

Global site tag (gtag.js) - Google Analytics