用基础的C语言实现中值滤波
时间: 2024-01-25 07:03:26 浏览: 108
中值滤波是一种非线性滤波方法,用于去除图像中的噪声。它的基本思想是用像素点周围的像素的中值来代替该像素的值,从而达到去噪的效果。
以下是用基础的 C 语言实现中值滤波的一个简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define SIZE 3
int main()
{
int i, j, k, l, n, m;
int img[SIZE][SIZE] = {{10, 20, 30}, {40, 50, 60}, {70, 80, 90}};
int temp[SIZE*SIZE];
printf("Original Image:\n");
for(i = 0; i < SIZE; i++)
{
for(j = 0; j < SIZE; j++)
{
printf("%d ", img[i][j]);
}
printf("\n");
}
printf("Processed Image:\n");
for(i = 0; i < SIZE; i++)
{
for(j = 0; j < SIZE; j++)
{
n = 0;
for(k = i - 1; k <= i + 1; k++)
{
for(l = j - 1; l <= j + 1; l++)
{
if(k >= 0 && k < SIZE && l >= 0 && l < SIZE)
{
temp[n++] = img[k][l];
}
}
}
for(k = 0; k < n - 1; k++)
{
for(l = k + 1; l < n; l++)
{
if(temp[k] > temp[l])
{
m = temp[k];
temp[k] = temp[l];
temp[l] = m;
}
}
}
img[i][j] = temp[n/2];
printf("%d ", img[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个示例中,我们使用一个 3x3 的二维数组来表示输入图像。对于每个像素,我们遍历其周围的 3x3 的像素,并将其值存储在一个一维数组中。然后我们对这个一维数组进行排序,取其中位数,并将其作为该像素的新值。最终输出处理后的图像。
注意,这个示例中只考虑了输入图像的边缘像素的处理。在实际应用中,我们需要根据具体情况来决定如何处理边缘像素。
阅读全文