写一个包含先中值滤波后均值滤波的C语言例程
时间: 2024-02-13 12:04:01 浏览: 73
以下是一个使用中值滤波和均值滤波的C语言例程:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义数据长度和滤波窗口大小
#define LENGTH 10
#define WINDOW_SIZE 3
// 中值滤波函数
int median_filter(int data[]) {
int temp[WINDOW_SIZE];
int i, j, k, tmp;
// 对窗口内的数据进行排序
for (i = 0; i < WINDOW_SIZE; i++) {
temp[i] = data[i];
for (j = i; j > 0; j--) {
if (temp[j] < temp[j - 1]) {
tmp = temp[j];
temp[j] = temp[j - 1];
temp[j - 1] = tmp;
}
}
}
// 返回中间值
return temp[WINDOW_SIZE / 2];
}
// 均值滤波函数
int mean_filter(int data[]) {
int sum = 0;
int i;
// 对窗口内的数据进行求和
for (i = 0; i < WINDOW_SIZE; i++) {
sum += data[i];
}
// 返回平均值
return sum / WINDOW_SIZE;
}
int main() {
int data[LENGTH] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int filtered_data[LENGTH];
int i, j;
// 对每个数据点进行滤波
for (i = 0; i < LENGTH; i++) {
int window[WINDOW_SIZE];
// 构造滤波窗口
for (j = 0; j < WINDOW_SIZE; j++) {
int index = i - WINDOW_SIZE / 2 + j;
if (index < 0) {
index = 0;
}
if (index >= LENGTH) {
index = LENGTH - 1;
}
window[j] = data[index];
}
// 中值滤波后再进行均值滤波
int median = median_filter(window);
filtered_data[i] = mean_filter(window);
}
// 输出滤波后的数据
for (i = 0; i < LENGTH; i++) {
printf("%d ", filtered_data[i]);
}
printf("\n");
return 0;
}
```
这个例程中,我们使用了一个长度为10的数据数组,并对每个数据点进行了滤波。对于每个数据点,我们构造了一个长度为3的滤波窗口,在窗口内进行中值滤波和均值滤波。最后输出滤波后的数据数组。
阅读全文