From 4d3c1a68116493c71a28a489cd0031844452d1cd Mon Sep 17 00:00:00 2001 From: phw2xrtvn <1402919626@qq.com> Date: Mon, 2 Dec 2024 11:37:07 +0800 Subject: [PATCH] ADD file via upload --- GaussianBlur_Step2.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 GaussianBlur_Step2.c diff --git a/GaussianBlur_Step2.c b/GaussianBlur_Step2.c new file mode 100644 index 0000000..f8ae39a --- /dev/null +++ b/GaussianBlur_Step2.c @@ -0,0 +1,52 @@ + +#include +#include + +#define H 5 +#define W 5 + +void applySeparableGaussianBlur(float src[H][W], float dst[H][W], int h, int w, float kx[3], float ky[3]) { + float buf[H][W] = {0}; + + // Apply horizontal kernel + 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]; + } + } + + // Apply vertical kernel + for (int i = 1; i < h - 1; i++) { + for (int j = 1; j < w - 1; 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[H][W] = { + {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 kx[3] = {1 / 16.0, 2 / 16.0, 1 / 16.0}; + float ky[3] = {1 / 16.0, 2 / 16.0, 1 / 16.0}; + float dst[H][W] = {0}; + + clock_t start = clock(); + applySeparableGaussianBlur(src, dst, H, W, kx, ky); + clock_t end = clock(); + + printf("Output matrix:\n"); + for (int i = 0; i < H; i++) { + for (int j = 0; j < W; j++) { + printf("%.2f ", dst[i][j]); + } + printf("\n"); + } + + printf("Execution time: %lf seconds\n", (double)(end - start) / CLOCKS_PER_SEC); + return 0; +}