|
大家感觉这个怎么样?
#include <stdio.h>
#define N 10 // 假设模拟量数组的大小
#define WINDOW_SIZE 3 // 中值滤波的窗口大小,这里为了简单起见,我们选择3
void sort(int *window, int size) {
// 简单的冒泡排序
for(int i = 0; i < size-1; i++) {
for(int j = 0; j < size-1-i; j++) {
if(window[j] > window[j+1]) {
int temp = window[j];
window[j] = window[j+1];
window[j+1] = temp;
}
}
}
}
int median_filter(int *input, int size) {
int window[WINDOW_SIZE];
for (int i = 0; i < size; i++) {
// 为窗口填充数据
// 对于数组的边界处理,这里简单地令窗口超出数组范围的部分等于边界值
for(int j = 0; j < WINDOW_SIZE; j++) {
int index = i + j - (WINDOW_SIZE / 2);
if(index < 0) index = 0; // 处理左边界
if(index > size - 1) index = size - 1; // 处理右边界
window[j] = input[index];
}
sort(window, WINDOW_SIZE); // 对窗口内的数据进行排序
input[i] = window[WINDOW_SIZE / 2]; // 将中值作为滤波结果
}
}
int main() {
int data[N] = {1, 50, 52, 48, 49, 500, 51, 52, 49, 50}; // 示例模拟量数组
printf("Original data: \n");
for(int i = 0; i < N; i++) {
printf("%d ", data[i]);
}
printf("\n");
median_filter(data, N); // 对数据进行中值滤波
printf("Filtered data: \n");
for(int i = 0; i < N; i++) {
printf("%d ", data[i]);
}
printf("\n");
return 0;
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|