c 中值滤波
时间: 2023-08-07 10:12:24 浏览: 76
C语言实现中值滤波的基本步骤如下:
1.读入图像数据,存放在一个二维数组中。
2.定义一个与原图像相同大小的二维数组,用于存放中值滤波后的结果。
3.设定窗口大小,例如3*3、5*5等。
4.遍历原图像每个像素点,对于每个像素点,以其为中心,取窗口内所有像素值,将其排序,取中间值作为该像素点的输出值。
5.将输出值存入结果数组中。
6.输出结果数组即为中值滤波后的图像。
以下是一个C语言实现的中值滤波的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define WINDOW_SIZE 3 // 窗口大小为3*3
int main()
{
int img[5][5] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
};
int result[5][5];
int window[WINDOW_SIZE * WINDOW_SIZE];
int i, j, k, l, mid, temp;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
for (k = 0; k < WINDOW_SIZE; k++) {
for (l = 0; l < WINDOW_SIZE; l++) {
if (i + k - WINDOW_SIZE / 2 < 0 || i + k - WINDOW_SIZE / 2 >= 5 ||
j + l - WINDOW_SIZE / 2 < 0 || j + l - WINDOW_SIZE / 2 >= 5) {
window[k * WINDOW_SIZE + l] = 0;
}
else {
window[k * WINDOW_SIZE + l] = img[i + k - WINDOW_SIZE / 2][j + l - WINDOW_SIZE / 2];
}
}
}
for (k = 0; k < WINDOW_SIZE * WINDOW_SIZE; k++) {
mid = k;
for (l = k + 1; l < WINDOW_SIZE * WINDOW_SIZE; l++) {
if (window[l] < window[mid]) {
mid = l;
}
}
temp = window[k];
window[k] = window[mid];
window[mid] = temp;
}
result[i][j] = window[WINDOW_SIZE * WINDOW_SIZE / 2];
}
}
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
```
以上代码演示了一个简单的5*5的图像进行中值滤波的过程。实际应用中需要注意图像边界问题和处理效率等问题。
阅读全文