写一个c语言程序 实现对一个二维矩阵的高通滤波 高斯平滑函数用【0.25,0.5,0.25】
时间: 2024-04-19 11:24:18 浏览: 195
下面是一个用C语言实现的高通滤波程序,使用了高斯平滑函数[0.25, 0.5, 0.25]对二维矩阵进行滤波:
```c
#include <stdio.h>
// 定义矩阵的大小
#define ROWS 3
#define COLS 3
// 高斯平滑函数
double gaussian_smooth[ROWS] = {0.25, 0.5, 0.25};
// 二维矩阵高通滤波函数
void high_pass_filter(int matrix[][COLS], int result_matrix[][COLS]) {
int i, j, k;
int sum;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
sum = 0;
for (k = 0; k < ROWS; k++) {
sum += matrix[i][j+k] * gaussian_smooth[k];
}
result_matrix[i][j] = matrix[i][j] - sum;
}
}
}
int main() {
int matrix[ROWS][COLS] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int result_matrix[ROWS][COLS];
high_pass_filter(matrix, result_matrix);
printf("Original Matrix:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
printf("\nResult Matrix after High Pass Filtering:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", result_matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
这个程序通过`high_pass_filter`函数对二维矩阵进行高通滤波。在`main`函数中,我们定义了一个3x3的二维矩阵`matrix`,然后调用`high_pass_filter`函数对其进行滤波,并将结果保存在`result_matrix`中。最后,程序会输出原始矩阵和滤波后的结果矩阵。
请注意,这里使用了简化的高斯平滑函数[0.25, 0.5, 0.25],你可以根据需要修改`gaussian_smooth`数组来使用其他的高斯平滑函数。另外,此程序仅演示了高通滤波的基本原理,并没有考虑边界处理和图像处理等更复杂的情况。如果你需要进行更复杂的图像处理,可能需要使用专门的图像处理库,如OpenCV等。
阅读全文