#include #include #define IDX(n) ((n) % 3) float kx[3] = { 0.25, 0.5, 0.25 }; float ky[3] = { 0.25, 0.5, 0.25 }; void applySeparableGaussianBlur(float src[5][5], float dst[5][5], int h, int w, float kx[3], float ky[3]) { float buf[5][5] = { 0 }; for (int i = 0; i < h; i++) { for (int j = 1; j < w - 1; j++) { buf[i][j] = src[i][j - 1] * kx[0] + src[i][j] * kx[1] + src[i][j + 1] * kx[2]; } } for (int i = 1; i < h - 1; i++) { for (int j = 0; j < w; j++) { dst[i][j] = buf[i - 1][j] * ky[0] + buf[i][j] * ky[1] + buf[i + 1][j] * ky[2]; } } } int main() { float src[5][5] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25} }; float dst[5][5] = { 0 }; clock_t start = clock(); applySeparableGaussianBlur(src, dst, 5, 5, kx, ky); clock_t end = clock(); printf("模糊后的图像矩阵:\n"); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { printf("%.2f ", dst[i][j]); } printf("\n"); } double time_taken = (double)(end - start) / CLOCKS_PER_SEC; printf("运行时间: %e 秒\n", time_taken); return 0; }