搜索
bottom↓
回复: 6

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

[复制链接]

出0入0汤圆

发表于 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));
}

出0入0汤圆

发表于 2014-4-10 16:28:00 | 显示全部楼层
我测试没有问题,虽然已经是3年后的回复了

出0入0汤圆

发表于 2018-12-13 17:07:24 | 显示全部楼层
真的没问题吗,  for(i=length;i>0;i--)  这个循环里面  ptr++; 这个指针没有归位,不是溢出了,难道是我看错了??

出0入0汤圆

发表于 2018-12-14 13:12:05 | 显示全部楼层
我来发个窗口自动调整的中值滤波,欢迎大家指正!

  1. #define MAX_WINDOW                31
  2. #define FILTER_DIFFERENCE         200
  3. typedef struct
  4. {
  5.         u8 inBuffIndex;
  6.         u8 realWindow;
  7.         u16 inBuff[MAX_WINDOW+1];
  8.         u16 temp[MAX_WINDOW+1];
  9.        
  10. }FilterDataType;


  11. u16 testBuff[31] = {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};

  12. u16 MiddleFilter_1sLoop(u16 inData)
  13. {
  14.     u8 getIndex,i,j;
  15.         u8 compCnt;
  16.         u16 compValue;
  17.        
  18.         FilterData.inBuff[FilterData.inBuffIndex++] = inData;
  19.         FilterData.inBuffIndex %= MAX_WINDOW;

  20.         #if 0
  21.         for (i = 0; i < MAX_WINDOW; i++)
  22.         {
  23.                 FilterData.inBuff[i] = testBuff[i];        // test...
  24.         }
  25.         FilterData.realWindow = 20;  // test...

  26.         #else
  27.         if (FilterData.realWindow < MAX_WINDOW)
  28.         {
  29.                 FilterData.realWindow++;
  30.         }
  31.         #endif
  32.         if (FilterData.realWindow < 3)
  33.         {
  34.                 return inData;
  35.         }
  36.         else if (FilterData.realWindow < MAX_WINDOW)        // 取最近 realWindow 个数据
  37.         {
  38.                 getIndex = MAX_WINDOW + FilterData.inBuffIndex - FilterData.realWindow;
  39.                 getIndex %= MAX_WINDOW;
  40.                
  41.                 for (i = 0; i < FilterData.realWindow; i++)
  42.                 {
  43.                         FilterData.temp[i] = FilterData.inBuff[getIndex++];
  44.                         getIndex %= MAX_WINDOW;
  45.                 }
  46.         }
  47.         else
  48.         {
  49.                 for (i = 0; i < MAX_WINDOW; i++)
  50.                 {
  51.                         FilterData.temp[i] = FilterData.inBuff[i];
  52.                 }
  53.         }

  54.        
  55.         compCnt = FilterData.realWindow/2 + 1;
  56.         for (i = 0; i < compCnt; i++)                // 冒泡排序
  57.         {
  58.                 for (j = 0; j < FilterData.realWindow-i-1; j++)
  59.                 {
  60.                         if (FilterData.temp[j] > FilterData.temp[j+1])
  61.                         {
  62.                                 compValue = FilterData.temp[j+1];
  63.                                 FilterData.temp[j+1] = FilterData.temp[j];
  64.                                 FilterData.temp[j] = compValue;
  65.                         }
  66.                 }
  67.         }

  68.         if ((inData > FilterData.temp[compCnt-1] + FILTER_DIFFERENCE)||(inData + FILTER_DIFFERENCE < FilterData.temp[compCnt-1]))
  69.         {
  70.                 FilterData.realWindow = 7;
  71.         }

  72.        
  73.     return FilterData.temp[compCnt-1];
  74. }
复制代码

出0入0汤圆

发表于 2018-12-14 15:12:51 | 显示全部楼层
shuxmpx123 发表于 2018-12-14 13:12
我来发个窗口自动调整的中值滤波,欢迎大家指正!

超越时空的回复!!!

出0入0汤圆

发表于 2018-12-16 21:13:36 | 显示全部楼层
atonghua 发表于 2018-12-14 15:12
超越时空的回复!!!

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

出0入0汤圆

发表于 2020-7-26 14:57:02 来自手机 | 显示全部楼层
“”窗口自动调整的中值滤波"" 记下!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 02:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表