这是pic单片机加权平均值滤波 这几个数是怎么运算的 我想知道运算步骤和结果

这是pic单片机加权平均值滤波 这几个数是怎么运算的 我想知道运算步骤和结果,第1张

看主程序:

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中值滤波代码及其原理、怎样写数字滤波程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10122207.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存