C++实现一维数组的中值滤波

C++实现一维数组的中值滤波(Median Filter)

中值滤波是一种非线性的滤波方法,其核心思想是用数据序列中一定范围内数据的中值来代替该范围内的原始数据。中值滤波可以有效的去除脉冲干扰等不稳定噪声,同时保留数据的边缘和细节。
中值滤波的步骤如下:

  1. 确定滤波窗口大小,即要取多少个数据进行计算;
  2. 将窗口对准数据序列的第一个数据点,计算该窗口内数据的中值,并将该中值放置于窗口中心的位置;
  3. 移动窗口,计算下一个数据点的中值,重复步骤2。

C++完整代码为:

#include<iostream>
#include <iomanip>
#include<math.h>

using namespace std;

int main() 
{
	int i = 0, j = 0;
	double temp = 0.0;
	double data[] = {1, 2.2, 3, 4, 5.1, 6, 7, 8, 8.9, 10,
	11, 12, 13.2, 14, 15, 16, 17.1, 17.9, 19, 20};
	double data_temp[] = {1, 2.2, 3, 4, 5.1, 6, 7, 8, 8.9, 10,
	11, 12, 13.2, 14, 15, 16, 17.1, 17.9, 19, 20};
	int size = sizeof(data)/sizeof(data[0]);
	
	// 中值滤波 
	int len = 3;
	int halfSize = len / 2; 
	int idx;
	double* kernel = new double[len];
	// 
	for (i=(len-1)/2; i<(size-(len-1)/2); i++)
	{
		int index = 0;
		for(j=-halfSize; j<=halfSize; ++j)
		{
			idx = i+j;
			kernel[index] = data_temp[idx];
			index++;
		}
		int temp;
		for (int m=0; m<len-1; m++)
		{
			for(int n=m+1; n<len; n++)
			{
				if(kernel[m] > kernel[n])
				{
					temp = kernel[m];
					kernel[m] = kernel[n];
					kernel[n] = temp;
				}
			}
		}
		data[i]	= kernel[(len/2)];
	}
	
	for(i=0; i<size; i++)
		cout << data[i] << endl;
	return 0; 
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值