ly_self 发表于 2011-6-21 14:45:56

中值滤波,大家看看有没有什么好的建议

这是小弟谢的中值滤波程序,大家给点建议啊
unsigned char MiddleFilter(unsigned char *ptr,unsigned char length)
{
    unsigned char i,j,DataTemp;
    for(i=length;i>0;i--)
    {
      for(j=0;j<(i-1);j++)
      {
            if(*ptr>*(ptr+1))
            {
                DataTemp = *ptr;
                *ptr = *(ptr+1);
                *(ptr+1) = DataTemp;
            }
            ptr++;
      }
    }
    return(*(ptr+length/2));
}

184747694 发表于 2014-4-10 16:28:00

我测试没有问题,虽然已经是3年后的回复了

shuxmpx123 发表于 2018-12-13 17:07:24

真的没问题吗,for(i=length;i>0;i--)这个循环里面ptr++; 这个指针没有归位,不是溢出了,难道是我看错了??

shuxmpx123 发表于 2018-12-14 13:12:05

我来发个窗口自动调整的中值滤波,欢迎大家指正!

#define MAX_WINDOW                31
#define FILTER_DIFFERENCE       200
typedef struct
{
        u8 inBuffIndex;
        u8 realWindow;
        u16 inBuff;
        u16 temp;
       
}FilterDataType;


u16 testBuff = {4,7,2,32,23,122,244,55,21,11,1,1,34,5531,11,55,223,122,466,211,666,112,33,888,33333,1111,343,111,1122,0};

u16 MiddleFilter_1sLoop(u16 inData)
{
    u8 getIndex,i,j;
        u8 compCnt;
        u16 compValue;
       
        FilterData.inBuff = inData;
        FilterData.inBuffIndex %= MAX_WINDOW;

        #if 0
        for (i = 0; i < MAX_WINDOW; i++)
        {
                FilterData.inBuff = testBuff;        // test...
        }
        FilterData.realWindow = 20;// test...

        #else
        if (FilterData.realWindow < MAX_WINDOW)
        {
                FilterData.realWindow++;
        }
        #endif
        if (FilterData.realWindow < 3)
        {
                return inData;
        }
        else if (FilterData.realWindow < MAX_WINDOW)        // 取最近 realWindow 个数据
        {
                getIndex = MAX_WINDOW + FilterData.inBuffIndex - FilterData.realWindow;
                getIndex %= MAX_WINDOW;
               
                for (i = 0; i < FilterData.realWindow; i++)
                {
                        FilterData.temp = FilterData.inBuff;
                        getIndex %= MAX_WINDOW;
                }
        }
        else
        {
                for (i = 0; i < MAX_WINDOW; i++)
                {
                        FilterData.temp = FilterData.inBuff;
                }
        }

       
        compCnt = FilterData.realWindow/2 + 1;
        for (i = 0; i < compCnt; i++)                // 冒泡排序
        {
                for (j = 0; j < FilterData.realWindow-i-1; j++)
                {
                        if (FilterData.temp > FilterData.temp)
                        {
                                compValue = FilterData.temp;
                                FilterData.temp = FilterData.temp;
                                FilterData.temp = compValue;
                        }
                }
        }

        if ((inData > FilterData.temp + FILTER_DIFFERENCE)||(inData + FILTER_DIFFERENCE < FilterData.temp))
        {
                FilterData.realWindow = 7;
        }

       
    return FilterData.temp;
}

atonghua 发表于 2018-12-14 15:12:51

shuxmpx123 发表于 2018-12-14 13:12
我来发个窗口自动调整的中值滤波,欢迎大家指正!

超越时空的回复!!!

shuxmpx123 发表于 2018-12-16 21:13:36

atonghua 发表于 2018-12-14 15:12
超越时空的回复!!!

时间是有点久了 , 估计楼主已经转行了~我只是借个位置保留我的代码~

eddia2012 发表于 2020-7-26 14:57:02

“”窗口自动调整的中值滤波"" 记下!
页: [1]
查看完整版本: 中值滤波,大家看看有没有什么好的建议