中值滤波算法--C 语言嵌入式
时间: 2023-08-24 09:51:56 浏览: 175
FPGA XC7A100T驱动OV5640采集图像实现中值滤波(Verilog HDL实现).zip
中值滤波是一种常用的图像处理算法,用于去除图像中的噪声。它的原理是将每个像素点的灰度值替换为该像素点周围邻域像素点灰度值的中值。
下面是一个用 C 语言实现中值滤波算法的示例代码:
```c
#include <stdio.h>
// 定义图像大小
#define ROWS 5
#define COLS 5
// 定义中值滤波窗口大小
#define WINDOW_SIZE 3
// 中值滤波函数
void medianFilter(int image[ROWS][COLS])
{
int window[WINDOW_SIZE * WINDOW_SIZE];
int i, j, k, l, count, temp;
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLS; j++)
{
count = 0;
// 获取当前像素点周围邻域的像素值
for (k = -WINDOW_SIZE / 2; k <= WINDOW_SIZE / 2; k++)
{
for (l = -WINDOW_SIZE / 2; l <= WINDOW_SIZE / 2; l++)
{
if (i + k >= 0 && i + k < ROWS && j + l >= 0 && j + l < COLS)
{
window[count] = image[i + k][j + l];
count++;
}
}
}
// 对邻域像素值进行排序
for (k = 0; k < count - 1; k++)
{
for (l = 0; l < count - 1 - k; l++)
{
if (window[l] > window[l + 1])
{
temp = window[l];
window[l] = window[l + 1];
window[l + 1] = temp;
}
}
}
// 将中值赋给当前像素点
image[i][j] = window[count / 2];
}
}
}
int main()
{
// 定义原始图像
int image[ROWS][COLS] = {
{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}
};
// 打印原始图像
printf("Original Image:\n");
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
printf("%d ", image[i][j]);
}
printf("\n");
}
printf("\n");
// 进行中值滤波
medianFilter(image);
// 打印滤波后的图像
printf("Filtered Image:\n");
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
printf("%d ", image[i][j]);
}
printf("\n");
}
return 0;
}
```
这段代码实现了一个简单的中值滤波算法,对一个 5x5 的图像进行中值滤波处理。你可以根据实际情况修改图像的大小和中值滤波窗口的大小。编译并运行该代码,即可得到原始图像和经过中值滤波处理后的图像。
阅读全文