用C语言写一个 滤波算法
时间: 2023-03-13 11:35:42 浏览: 58
我可以为你提供一个示例:// 定义数组
int array[10];// 填充数组
for (int i = 0; i < 10; i++)
{
array[i] = i;
}// 使用滤波算法
for (int i = 0; i < 10; i++)
{
int sum = 0; // 计算累计和
for (int j = 0; j < 5; j++)
{
if (i - j >= 0)
{
sum += array[i - j];
}
} // 将累计和除以5,得到滤波结果
array[i] = sum / 5;
}
相关问题
请用c语言写一个滤波算法
我不是很熟悉C语言,但是我可以提供一般的滤波算法的概念。滤波算法是一种处理数字信号的技术,它可以从信号中消除噪声或其他不需要的部分,同时保留信号的有用部分。滤波算法可以使用不同的算法,如卷积滤波器、最小二乘滤波器、指数滤波器等。
使用C语言写几种滤波算法
以下是几种常见的滤波算法的C语言实现:
1. 均值滤波(Mean Filter)
```c
void meanFilter(int *input, int *output, int size, int kernel_size) {
int half_kernel = kernel_size / 2;
for (int i = half_kernel; i < size - half_kernel; i++) {
int sum = 0;
for (int j = -half_kernel; j <= half_kernel; j++) {
sum += input[i+j];
}
output[i] = sum / kernel_size;
}
}
```
2. 中值滤波(Median Filter)
```c
void medianFilter(int *input, int *output, int size, int kernel_size) {
int half_kernel = kernel_size / 2;
for (int i = half_kernel; i < size - half_kernel; i++) {
int tmp[kernel_size];
for (int j = -half_kernel; j <= half_kernel; j++) {
tmp[j+half_kernel] = input[i+j];
}
int n = sizeof(tmp)/sizeof(tmp[0]);
qsort(tmp, n, sizeof(int), cmpfunc);
output[i] = tmp[half_kernel];
}
}
int cmpfunc(const void * a, const void * b) {
return ( *(int*)a - *(int*)b );
}
```
3. 高斯滤波(Gaussian Filter)
```c
void gaussianFilter(int *input, int *output, int size, int kernel_size, float sigma) {
float kernel[kernel_size][kernel_size];
float sum = 0.0;
int half_kernel = kernel_size / 2;
for (int i = -half_kernel; i <= half_kernel; i++) {
for (int j = -half_kernel; j <= half_kernel; j++) {
kernel[i+half_kernel][j+half_kernel] = exp(-(i*i+j*j)/(2*sigma*sigma));
sum += kernel[i+half_kernel][j+half_kernel];
}
}
for (int i = 0; i < kernel_size; i++) {
for (int j = 0; j < kernel_size; j++) {
kernel[i][j] /= sum;
}
}
for (int i = half_kernel; i < size - half_kernel; i++) {
float sum = 0.0;
for (int j = -half_kernel; j <= half_kernel; j++) {
for (int k = -half_kernel; k <= half_kernel; k++) {
sum += input[(i+j)*size+(i+k)] * kernel[j+half_kernel][k+half_kernel];
}
}
output[i] = round(sum);
}
}
```
这些代码只是基本实现,可能需要根据具体的应用场景进行优化。