看主程序:
void main(void)
{
while(1)
{
temp=filter(); //加权平均值滤波
printf("%d\n",temp);
TX_temp(); //未知,可能是串口发送
}
}
主要是这部分
char filter()
{
char i;
char value_buf[N];
int sum=0;
for(i=0;i<N;i++) //这个for循环把table中的值赋给value_buf数组
{
value_buf[i]=table[i]; //其实就是 value_buf[4]={10,20,30,65};
delay(500); /不知为何要加延时,本人感觉/毫无意义浪费cpu
}
for(i=0;i<N;i++) //关键部分 sum=101+202+303+404
sum+=value_buf[i]mul[i];
return (char)(sum/sum_mul); //返回(101+202+303+404)/sum_mul,整数部分
}
这部分代码没什么用,就做了一个简单的运算,加权平均值滤波算法如下:
/
输入 参数:1需处理数组首地址
2权数组首地址(暂且用power_buf,英文不行)
3数组长度
/
int filter(char dat_buf_p, char power_buf_p, char buf_num)
{
int sum=0;
int sum_mul=0;
for(char i=0; i<buf_num; i++)
{
sum+=(dat_buf_p)(power_buf_p); //数组权值
sum_mul+=power_buf_p; //生成权值和
dat_buf_p++; //数组指针加一,指向数组中下一个数
power_buf_p++; //权数组指针加一,指向权数组中下一个权
}
return (int)(sum/ sum_mul);
}
你试试这个函数,有问题跟我说。
在function medfilt_Callback(hObject, eventdata, handles) 后面输入如下程序
x=(handlesimg);
y=imnoise(x,'salt & pepper',004); %加椒盐噪声
z=medfilt2(y(:,:),[5 5],'symmetric'); %中值滤波
imshow(z);
imwrite(z,'medfiltjpg');
title('zhongzhilvbo');
这个是我刚做完的一个关于GUI的课程设计里的代码,在你添加的那个按钮的callback函数后面添加这段代码就可以了,中间还给加了椒盐噪声。
可以告诉你方法:算数平均滤波,就是求出k次采样值的总和,再除以k;中值滤波法,是把k个采样值按照从小到大排列顺序,然后找到位于最中间的那个值;最后一种不知道你们老师的防脉冲是什么意思,猜测可能是去掉k次采样值中大于或小于某个值,剩余值求平均数。
让别人免费给你写程序基本上不可能,这个得花时间和精力。
以上就是关于这是pic单片机加权平均值滤波 这几个数是怎么运算的 我想知道运算步骤和结果全部的内容,包括:这是pic单片机加权平均值滤波 这几个数是怎么运算的 我想知道运算步骤和结果、matlab中值滤波代码及其原理、怎样写数字滤波程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)