c语言数组进行中值滤波
时间: 2023-09-14 10:03:23 浏览: 130
C语言 中值滤波器
5星 · 资源好评率100%
中值滤波是一种常用的数字图像处理方法,可以去除图像中的噪声。在C语言中,可以通过数组进行中值滤波操作。以下是一个简单的中值滤波实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define SIZE 9 // 滤波窗口大小
// 中值滤波函数
int median_filter(int *a, int n)
{
int i, j, temp;
// 用冒泡排序对窗口中的元素排序
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
// 返回中值
return a[n / 2];
}
int main()
{
int i, j, k;
int image[5][5] = { { 1, 4, 2, 3, 5 },
{ 2, 2, 3, 4, 6 },
{ 3, 2, 1, 5, 7 },
{ 4, 3, 2, 2, 8 },
{ 5, 4, 3, 2, 1 } };
int filtered_image[5][5];
int window[SIZE];
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
// 将滤波窗口中的像素值存入数组
k = 0;
for (int m = -1; m <= 1; m++) {
for (int n = -1; n <= 1; n++) {
if (i + m >= 0 && i + m < 5 && j + n >= 0 && j + n < 5) {
window[k++] = image[i + m][j + n];
}
}
}
// 对滤波窗口中的像素值进行中值滤波
filtered_image[i][j] = median_filter(window, SIZE);
}
}
// 输出滤波后的图像
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
printf("%d ", filtered_image[i][j]);
}
printf("\n");
}
return 0;
}
```
在上述示例中,我们定义了一个大小为9的滤波窗口,遍历图像中的每个像素,并将滤波窗口中的像素值存入数组中。然后对这些像素值进行排序,并返回中值,即为该像素的滤波结果。最后输出滤波后的图像。
阅读全文