中位值滤波算法C代码
时间: 2023-08-06 17:27:00 浏览: 89
中位值滤波(Median filter)是一种非线性滤波方法,它对一幅图像中某一像素点的灰度值进行处理时,用该点邻域窗口内(一般为3×3、5×5等)各像素点灰度值的中值代替该像素点的灰度值。以下是中位值滤波的C语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 3 // 中值滤波窗口大小为 3x3
int main()
{
int i, j, k, l;
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 tmp[N * N]; // 存储中值滤波窗口内的像素值
// 打印原始图像
printf("Original Image:\n");
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
printf("%d ", img[i][j]);
}
printf("\n");
}
// 对图像进行中值滤波处理
for (i = 0; i < 5 - N + 1; i++) {
for (j = 0; j < 5 - N + 1; j++) {
k = 0;
// 将中值滤波窗口内的像素值存储到 tmp 数组中
for (l = 0; l < N; l++) {
for (int m = 0; m < N; m++) {
tmp[k++] = img[i + l][j + m];
}
}
// 对 tmp 数组进行排序
for (k = 0; k < N * N - 1; k++) {
for (l = k + 1; l < N * N; l++) {
if (tmp[k] > tmp[l]) {
int temp = tmp[k];
tmp[k] = tmp[l];
tmp[l] = temp;
}
}
}
// 将排序后的中间值赋给中心像素
img[i + N / 2][j + N / 2] = tmp[N * N / 2];
}
}
// 打印中值滤波后的图像
printf("Median Filtered Image:\n");
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
printf("%d ", img[i][j]);
}
printf("\n");
}
return 0;
}
```
该代码实现了一个简单的中值滤波算法,可以对图像中的噪声进行去除。在代码中,我们使用了一个 3x3 的中值滤波窗口,并对窗口内的像素值进行排序,取中间值作为中心像素的新值。
阅读全文