C语言实现中位值平均滤波算法

中位值平均滤波算法
基本原理:取一组数据,去掉其中数据中的最大值和最小值,对剩余的数据求平均值

转载

/**
*  中位值平均滤波
* @param pData:没有滤波的数据 
* @param nSize:数据大小 
* @return:滤波数值
*/
unsigned short MedianFilter(unsigned short* pData,int nSize)
{
    unsigned short max,min;
    int sum;
    if(nSize>2)
    {
        max = pData[0];
        min = max;
        sum = 0;
        for(int i=0;i<nSize;i++)
        {
            sum += pData[i];            
            if(pData[i]>max)
            {
                max = pData[i];   //一个循环之后max就是最大的值
            }

            if(pData[i]<min)
            {
                min = pData[i];   //一个循环之后min就是最小的值
            }
        }

        sum = sum-max-min;       //去掉最大的值和最小的值
        return sum/(nSize-2); //对N-2个数求平均值          
    }

    return 0;
}

以上版本转载,原文章请点击这里

改进版本:

  • 不使用返回值的方法,减少了赋值的动作,可以提升反应速度
  • 使用浮点型数据,保留两位小数,提高精度
/**
*  中位值平均滤波
*  pData:没有滤波的数据 
*  nSize:数据大小 
* average:滤波数据的平均值 (通过形参写入,需提前声明一个变量,存储average)
*/
int MedianFilter(int* pData,int nSize,float *average)
{
    int max,min;
    float sum=0;
    if(nSize>2)
    {
        max = pData[0];
        min = max;
        for(int i=0;i<nSize;i++)
        {
            sum += pData[i];            
            if(pData[i]>max)
            {
                max = pData[i];   //一个循环之后max就是最大的值
            }

            if(pData[i]<min)
            {
                min = pData[i];   //一个循环之后min就是最小的值
            }
        }
    	sum = sum-max-min;       //去掉最大的值和最小的值
    	(*average)=((float)(int)((sum/(nSize-2)+0.005)*100)))/100; //对N-2个数求平均值,保留两位小数  
    	return 1;        
    }
    return 0;
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值