c语言中值滤波问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中值滤波问题?相关的知识,希望对你有一定的参考价值。
中值滤波是信号处理中一种常用的滤波算法,它是指在在一维信号数据中对目标信号给一个模板,该模板以某一数据为中心的m(m为大于1的奇数)个数据,构成一个滤波模板,再用模板中的m个数据排序后的中间值来代替原来数据值。对原始信号中的每一个数据均进行如上处理即可得到处理后的信号。注意:模板大小为m时,信号最初的m/2个数据和最后的m/2个数据无需处理,例如m为3时,第一个和最后一个数据无需处理。
编写一个主函数,输入n(n由用户输入决定)个int 型数据,并存入数组;
编写一个函数void median(int * data, int n, int m), 对长度为n的数据实现模板为m的中值滤波;
编写一个函数 int find(int * data, int n),寻找滤波后的n个数据中出现次数最多的数据(有同样多次数时取某一个即可),返回该数据;
在主函数中调用函数对用户输入的数据完成中值滤波和出现次数最多数据的输出。
#include<stdio.h>
void median(int * data, int n, int m);
int find(int * data, int n);
int main()
int i,n,m,*a[100];
printf("决定输入数组的个数");
scanf_s("%d", &n);
printf("决定模板大小");
scanf_s("%d", &m);
printf("输入数组");
for (i = 0; i < n; i++)
scanf_s("%d", &a[i]);
median(*a, n, m);
printf("中值滤波后出现次数最多的数据是%d", find(*a, n));
void median(int * data, int n, int m)
int i, j, k, temp, b[1000];
for (i = m / 2; i < n - m / 2; i++)
for (j = i - m / 2; i <= i + m / 2; j++)
k = 0;
b[k] = *(data + j);
k++;
for(k=0;k<m;k++)
for (j = 0; j < m - 1 - k; m++)
if (b[j] > b[j + 1])
temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
*(data + i) = b[m / 2];
int find(int * data, int n)
int i,j,k=0,max,b[1000];
for (i = 0; i < n; i++)
for (j = i + 1; j < n; j++)
if (*(data + j) == *(data + i))
k++;
b[i] = k;
for (i = 1; i < n; i++)
if (b[i] > b[i - 1])
max = b[i];
return max;
以上是我写的代码,但是没有任何输出,求解决!
#include<stdlib.h>
void median(int* data, int n, int m);
int find(int* data, int n);
int main()
int i, n, m, a[100];
printf("决定输入数组的个数:");
scanf_s("%d", &n);
printf("决定模板大小:");
scanf_s("%d", &m);
printf("输入数组:");
for (i = 0; i < n; i++)
scanf_s("%d", &a[i]);
for (i = 0; i < n; i++)
printf_s("%d ", a[i]);
printf_s("\n");
median(a, n, m);
for (i = 0; i < n; i++)
printf_s("%d ", a[i]);
printf_s("\n");
printf("中值滤波后出现次数最多的数据是%d\n", find(a, n));
void median(int* data, int n, int m)
int i, j, k, temp, b[1000],c[1000];
int j_tmp;
for (i = 0; i < n ; i++)
k = 0;
for (j = i - m / 2; j <= i + m / 2; j++)
if (j < 0)
j_tmp = 0;
else
j_tmp = j;
b[k] = *(data + j_tmp);
k++;
for (k = 0; k < m; k++)
for (j = 0; j < m - 1 - k; j++)
if (b[j] > b[j + 1])
temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
c[i] = b[m / 2];
for (i = 0; i < n; i++)
*(data + i) = c[i];
int find(int* data, int n)
int i, j, k = 0, max = 0, b[1000];
for (i = 0; i < n; i++)
for (j = i + 1; j < n; j++)
if (*(data + j) == *(data + i))
k++;
b[i] = k;
for (i = 1; i < n; i++)
if (b[i] > b[i - 1])
max = b[i];
return max;
以上是关于c语言中值滤波问题?的主要内容,如果未能解决你的问题,请参考以下文章