金牌会员
- 积分
- 1345
- 威望
- 663
- 贡献
- 350
- 兑换币
- 299
- 注册时间
- 2012-7-9
- 在线时间
- 166 小时
|
自己做了一个简单的中值滤波的函数:
int Mid_Lvbo(int x, int y, int z)
{
int a=0;
int b=0;
int c=0;
int m=0;
a=x;
b=y;
c=z;
if(a>b)
{
m=a;
a=b;
b=m;
}
if(a>c)
{
m=a;
a=c;
c=m;
}
if(b>c)
{
m=b;
b=c;
c=m;
}
return b;
}
void main()
{
int i=0;
int temp=0;
int aa[10]={9,10,7,8,8,4,5,2,3,0};
for(i=1; i<9 ;i++)
{
temp=Mid_Lvbo(aa[i-1], aa[i], aa[i+1]);
aa[i]=temp;
}
while(1)
{}
}
改变数组的元素运行了几次:
将结果记录如下:(a[10]中值滤波前 >> a[10]中值滤波后)
0123456789 >> 0123456789
9876543210 >> 9876543210
9876843210 >> 9877743210
9876841210 >> 9877742210
9876845210 >> 9877755210
9 10 7 8 8 4 5 2 3 0 >> 9 9 8 8 8 5 5 3 3 0
还有一点容易出错的需要注意的是
有的网上的函数是这样写的:
/****************中值滤波******************
说明:取三个数的中值
***************************************/
unsigned get_mid(int a,int b,int c)
{
int x;
if(a>b) {x=b;b=a;a=x;}
if(b>c) {x=c;c=b;b=x;}
if(c>a) {x=a;a=c;c=x;}
return b;
}
但是这样的函数返回的不一定是abc的中值
很简单可以自己写几个数试试 |
|