使用C语言写一个中位均值滤波函数
时间: 2024-02-03 17:13:25 浏览: 80
中值滤波算法改进之C语言实现.rar_C语言中值滤波_图像中值滤波_均值滤波c语言_改进中值滤波_改进滤波
以下是使用C语言编写的中位均值滤波函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 3 // 中位均值滤波器的窗口大小
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
void median_filter(int *input, int *output, int length) {
int window[N];
int i, j, k;
for (i = 0; i < length; i++) {
int start = i - N/2;
int end = i + N/2;
if (start < 0) {
start = 0;
end = N - 1;
}
if (end >= length) {
end = length - 1;
start = end - (N - 1);
}
for (j = start, k = 0; j <= end; j++, k++) {
window[k] = input[j];
}
qsort(window, N, sizeof(int), compare);
output[i] = window[N/2];
}
}
int main() {
int input[] = {1, 5, 3, 7, 2, 4, 6, 8};
int output[8];
int i;
median_filter(input, output, 8);
printf("Input: ");
for (i = 0; i < 8; i++) {
printf("%d ", input[i]);
}
printf("\n");
printf("Output: ");
for (i = 0; i < 8; i++) {
printf("%d ", output[i]);
}
printf("\n");
return 0;
}
```
这个函数实现了一个简单的中位均值滤波器,输入是一个整数数组,输出是一个经过滤波后的整数数组。在这个函数中,我们使用了一个窗口大小为N的滑动窗口,将当前元素及其前后N/2个元素放入窗口中,然后对窗口进行排序,取中间的元素作为输出。最后,我们可以在main函数中调用这个函数并打印结果。
阅读全文