中值滤波

简介: <p>中值滤波是一种典型的非线性滤波技术,在一定条件下可以克服线性滤波器(如均值滤波)带来的图像细节模糊。</p> <p>优点:消除杂散噪声点而不会或较小程度地造成边缘模糊。</p> <p>缺点:对于图像中含有较多点、线、尖角细节的,不适宜采用中值滤波。</p> <p>基本思想:将模板(如方形、线形、十字形、菱形等)中的像素值从小到大排序,将中值代替模板中间的或者指定位置的像素值。<

中值滤波是一种典型的非线性滤波技术,在一定条件下可以克服线性滤波器(如均值滤波)带来的图像细节模糊。

优点:消除杂散噪声点而不会或较小程度地造成边缘模糊。

缺点:对于图像中含有较多点、线、尖角细节的,不适宜采用中值滤波。

基本思想:将模板(如方形、线形、十字形、菱形等)中的像素值从小到大排序,将中值代替模板中间的或者指定位置的像素值。


下面给出模板为3x3大小方形的中值滤波C++源代码:

	/**************中值滤波**************
	//Luma
	for( y = 1; y < height-1; y++ )
	{
		pBgf += stride;
		for( x = 1; x < width-1; x++ )
		{		
			//Insertion-Sort(A):3x3
			Pel A[9];
			A[0]=(pBgf-stride)[x-1];	A[1]=(pBgf-stride)[x];	A[2]=(pBgf-stride)[x+1];
			A[3] = pBgf[x-1];	A[4] = pBgf[x];	A[5] = pBgf[x+1];
			A[6]=(pBgf+stride)[x-1];	A[7]=(pBgf+stride)[x];	A[8]=(pBgf+stride)[x+1];
			for(int j=1; j<9; j++)
			{
				Pel key=A[j];
				int i=j-1;
				while( i>0 && A[i]>key )
				{
					A[i+1]=A[i];
					i=i-1;
				}			
				A[i+1]=key;
			}
			pBgf[x] = A[5];//取中值代替模板中心位置的像素值
		}
	}

	height >>= 1;
	width  >>= 1;
	stride >>= 1;
	//Cb
	pBgf = pcPicYuvBgf->getCbAddr();
	for( y = 1; y < height-1; y++ )
	{
		pBgf += stride;
		for( x = 1; x < width-1; x++ )
		{		
			//Insertion-Sort(A):3x3
			Pel A[9];
			A[0]=(pBgf-stride)[x-1];	A[1]=(pBgf-stride)[x];	A[2]=(pBgf-stride)[x+1];
			A[3] = pBgf[x-1];	A[4] = pBgf[x];	A[5] = pBgf[x+1];
			A[6]=(pBgf+stride)[x-1];	A[7]=(pBgf+stride)[x];	A[8]=(pBgf+stride)[x+1];
			for(int j=1; j<9; j++)
			{
				Pel key=A[j];
				int i=j-1;
				while( i>0 && A[i]>key )
				{
					A[i+1]=A[i];
					i=i-1;
				}			
				A[i+1]=key;
			}
			pBgf[x] = A[5];//取中值代替模板中心位置的像素值
		}
	}
	//Cr
	pBgf = pcPicYuvBgf->getCrAddr();
	for( y = 1; y < height-1; y++ )
	{
		pBgf += stride;
		for( x = 1; x < width-1; x++ )
		{		
			//Insertion-Sort(A):3x3
			Pel A[9];
			A[0]=(pBgf-stride)[x-1];	A[1]=(pBgf-stride)[x];	A[2]=(pBgf-stride)[x+1];
			A[3] = pBgf[x-1];	A[4] = pBgf[x];	A[5] = pBgf[x+1];
			A[6]=(pBgf+stride)[x-1];	A[7]=(pBgf+stride)[x];	A[8]=(pBgf+stride)[x+1];
			for(int j=1; j<9; j++)
			{
				Pel key=A[j];
				int i=j-1;
				while( i>0 && A[i]>key )
				{
					A[i+1]=A[i];
					i=i-1;
				}			
				A[i+1]=key;
			}
			pBgf[x] = A[5];//取中值代替模板中心位置的像素值
		}
	}


目录
相关文章
|
16天前
|
计算机视觉
直方图均衡化
直方图均衡化是一种图像处理技术,通过改变图像灰度级分布,增强图像对比度。手动实现包括计算灰度直方图、像素总数、灰度分布频率、累积分布频率,然后归一化映射到新灰度级,最终得到增强对比度的图像。该方法适用于改善灰度集中或明暗对比不明显的图像,但全局处理可能导致背景干扰增强,丢失细节,且某些图像可能过度增强。局部直方图均衡化可作为改进方案。
12 1
|
10天前
|
计算机视觉
图像直方图
以下是内容摘要: 本文介绍了直方图在图像处理中的应用,包括图像增强和图像分割。直方图均衡化用于改善图像的亮度分布,而根据直方图可获取分割阈值以实现图像分割。此外,直方图对比有助于图像分类。直方图是表示图像亮度分布的图表,通过分析直方图的峰值可判断图像属于低调、中间调还是高调。直方图均衡化则能将图像转换为灰度分布更均匀的新图像。
10 0
|
6月前
|
Python
边缘检测汇总
边缘检测汇总
26 0
|
9月前
|
机器学习/深度学习 传感器 算法
【图像去噪】基于高斯滤波+均值滤波+中值滤波+双边滤波滤波实现图像去噪(含信噪比)附Matlab代码
【图像去噪】基于高斯滤波+均值滤波+中值滤波+双边滤波滤波实现图像去噪(含信噪比)附Matlab代码
|
10月前
常见滤波(高斯滤波、均值滤波等)的简单理解
常见滤波(高斯滤波、均值滤波等)的简单理解
76 0
|
11月前
|
资源调度 算法 API
OpenCV_06 图像平滑:图像噪声+图像平滑+滤波
由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。
102 0
|
12月前
|
资源调度 计算机视觉
CV10 图像模糊(均值、高斯、中值、双边滤波)
当我们只想得到感兴趣的物体时,通过图像模糊,可以将那些尺寸和亮度较小的物体过滤掉,较大的物体则易于检测。除了降低噪声,这就是图像平滑(模糊)的另一个重要应用:减少噪点,突出ROI,以便目标提取。
222 0
|
计算机视觉
灰度直方图及直方图均衡化
灰度直方图及直方图均衡化
67 0
Matalb-图像均值滤波,中值滤波,梯度锐化(sobel算子)的实现
Matalb-图像均值滤波,中值滤波,梯度锐化(sobel算子)的实现
148 0
Matalb-图像均值滤波,中值滤波,梯度锐化(sobel算子)的实现
MATLAB-均值滤波 中值滤波对高斯噪声和椒盐噪声的对比
MATLAB-均值滤波 中值滤波对高斯噪声和椒盐噪声的对比
158 0