高斯滤波的c语言代码
时间: 2024-06-20 15:03:09 浏览: 11
高斯滤波是一种常用的图像处理算法,它可以平滑图像并去除噪声。下面是一个简单的C语言实现的高斯滤波算法的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265358979323846
// 高斯分布函数
float gauss(int x, int y, float sigma)
{
return exp(-(x * x + y * y) / (2 * sigma * sigma)) / (2 * PI * sigma * sigma);
}
// 高斯滤波函数
void gaussian_filter(unsigned char *img, int width, int height, float sigma)
{
int size = (int)(sigma * 3) * 2 + 1; // 核大小
float *kernel = (float *)malloc(size * size * sizeof(float)); // 分配内存
// 计算高斯核
float sum = 0;
for (int i = -size/2; i <= size/2; i++) {
for (int j = -size/2; j <= size/2; j++) {
int idx = (i + size/2) * size + j + size/2;
kernel[idx] = gauss(j, i, sigma);
sum += kernel[idx];
}
}
// 归一化
for (int i = 0; i < size * size; i++) {
kernel[i] /= sum;
}
// 卷积操作
for (int y = size/2; y < height - size/2; y++) {
for (int x = size/2; x < width - size/2; x++) {
float sum = 0;
for (int i = -size/2; i <= size/2; i++) {
for (int j = -size/2; j <= size/2; j++) {
int idx = (i + size/2) * size + j + size/2;
sum += img[(y+i)*width+x+j] * kernel[idx];
}
}
img[y*width+x] = (unsigned char)sum;
}
}
free(kernel); // 释放内存
}
int main()
{
int width = 640, height = 480;
unsigned char *img = (unsigned char *)malloc(width * height);
// TODO: 读入图像
float sigma = 1.5;
gaussian_filter(img, width, height, sigma);
// TODO: 输出图像
free(img); // 释放内存
return 0;
}
```
上述代码中,`gauss`函数用于计算高斯分布函数,`gaussian_filter`函数用于对输入图像进行高斯滤波。在`main`函数中,你需要自行读入图像,并在高斯滤波后输出图像。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)