给我用C语言写一个均值滤波,并详细注释
时间: 2024-05-08 17:17:40 浏览: 238
中值滤波算法改进之C语言实现.rar_C语言中值滤波_图像中值滤波_均值滤波c语言_改进中值滤波_改进滤波
以下是用C语言实现均值滤波的代码,并进行详细注释:
```
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 5 // 图像宽度
#define HEIGHT 5 // 图像高度
// 均值滤波函数
void mean_filter(int input[][WIDTH], int output[][WIDTH], int size)
{
int i, j, k, l;
int sum, count;
// 对于每个像素点,计算其周围size*size的像素点的平均值
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
sum = 0;
count = 0;
for (k = -size / 2; k <= size / 2; k++) {
for (l = -size / 2; l <= size / 2; l++) {
// 如果像素点超出图像边界,则不计算其值
if (i + k < 0 || i + k >= HEIGHT || j + l < 0 || j + l >= WIDTH) {
continue;
}
sum += input[i + k][j + l];
count++;
}
}
output[i][j] = sum / count;
}
}
}
int main()
{
int i, j;
int input[HEIGHT][WIDTH] = {
{10, 20, 30, 40, 50},
{60, 70, 80, 90, 100},
{110, 120, 130, 140, 150},
{160, 170, 180, 190, 200},
{210, 220, 230, 240, 250}
};
int output[HEIGHT][WIDTH];
// 打印原始图像
printf("Original Image:\n");
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
printf("%d ", input[i][j]);
}
printf("\n");
}
// 进行均值滤波
mean_filter(input, output, 3);
// 打印滤波后的图像
printf("Filtered Image:\n");
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
printf("%d ", output[i][j]);
}
printf("\n");
}
return 0;
}
```
注释说明如下:
1. `WIDTH`和`HEIGHT`定义了图像的宽度和高度,这里假设图像大小为5x5。
2. `mean_filter`函数是均值滤波的实现函数,其中`input`是原始图像,`output`是滤波后的图像,`size`是滤波器的大小。
3. 在`mean_filter`函数中,首先对于每个像素点,计算其周围size*size的像素点的平均值,然后将平均值赋值给输出图像的对应像素点。
4. `main`函数中定义了原始图像`input`和输出图像`output`,并调用`mean_filter`函数进行均值滤波。
5. 最后打印原始图像和滤波后的图像。
阅读全文