图像中值滤波处理C语言
时间: 2023-10-28 20:06:10 浏览: 77
以下是一个简单的C语言代码示例,演示如何使用中值滤波器处理图像:
```
#include <stdio.h>
#include <stdlib.h>
#define SIZE 3
int main() {
int image[SIZE][SIZE] = {{3, 2, 1},
{6, 5, 4},
{9, 8, 7}};
int filtered_image[SIZE][SIZE];
// 中值滤波
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
int values[SIZE * SIZE];
int index = 0;
for (int k = i - 1; k <= i + 1; k++) {
for (int l = j - 1; l <= j + 1; l++) {
if (k >= 0 && k < SIZE && l >= 0 && l < SIZE) {
values[index++] = image[k][l];
}
}
}
// 对像素值进行排序
for (int k = 0; k < index - 1; k++) {
for (int l = k + 1; l < index; l++) {
if (values[k] > values[l]) {
int temp = values[k];
values[k] = values[l];
values[l] = temp;
}
}
}
// 取中值作为滤波后的像素值
filtered_image[i][j] = values[(index - 1) / 2];
}
}
// 输出滤波前的图像
printf("Original Image:\n");
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
printf("%d ", image[i][j]);
}
printf("\n");
}
// 输出滤波后的图像
printf("Filtered Image:\n");
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
printf("%d ", filtered_image[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个示例中,我们使用一个3x3的中值滤波器来处理一个3x3的图像。我们首先定义一个原始图像数组和一个滤波后的图像数组。然后,我们使用两个嵌套的循环遍历原始图像中的每个像素,并计算其周围像素的中值。我们使用一个值数组来存储周围像素的值,并对它们进行排序,然后取中值作为滤波后的像素值。最后,我们输出滤波前后的图像。
阅读全文