中值滤波,大家看看有没有什么好的建议
这是小弟谢的中值滤波程序,大家给点建议啊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));
} 我测试没有问题,虽然已经是3年后的回复了 真的没问题吗,for(i=length;i>0;i--)这个循环里面ptr++; 这个指针没有归位,不是溢出了,难道是我看错了?? 我来发个窗口自动调整的中值滤波,欢迎大家指正!
#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;
} shuxmpx123 发表于 2018-12-14 13:12
我来发个窗口自动调整的中值滤波,欢迎大家指正!
超越时空的回复!!! atonghua 发表于 2018-12-14 15:12
超越时空的回复!!!
时间是有点久了 , 估计楼主已经转行了~我只是借个位置保留我的代码~ “”窗口自动调整的中值滤波"" 记下!
页:
[1]