Realization of median filtering algorithm in C language

The
basic principle of the median average filtering algorithm : take a set of data, remove the maximum and minimum values ​​in the data, and average the remaining data

Reprint

/**
*  中位值平均滤波
* @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;
}

The above version is reprinted, the original article, please click here

Improved version:

  • The method of not using the return value reduces the assignment action and can improve the response speed
  • Use floating-point data, keep two decimal places, improve accuracy
/**
*  中位值平均滤波
*  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;
}

Guess you like

Origin blog.csdn.net/weixin_44333597/article/details/107706678