diff --git a/step2 b/step2 new file mode 100644 index 0000000..9d11952 --- /dev/null +++ b/step2 @@ -0,0 +1,50 @@ +#include +#include + +#define IDX(n)((n)%3) + +float inputImage[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 kx[3] = { 1.0f / 4,2.0f / 4,1.0f / 4 }; +float ky[3] = { 1.0f / 4,2.0f / 4,1.0f / 4 }; +float buf[3][3] = { 0 }; + +void applySeparableGaussianBlur(float src[][5], float dst[][5], int h, int w, float kx[], float ky[3]) { + for (int i = 0; i < 2; ++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 = 1; j < w - 1; ++j) { + buf[IDX(i + 1)][j] = src[i + 1][j - 1] * kx[0] + src[i + 1][j] * kx[1] + src[i + 1][j + 1] * kx[2]; + } + + for (int j = 1; j < w - 1; ++j) { + dst[i][j] = buf[IDX(i - 1)][j] * ky[0] + buf[IDX(i)][j] * ky[1] + buf[IDX(i + 1)][j] * ky[2]; + } + } +} + +int main() { + float outputImage[5][5] = { 0 }; + clock_t start, end; + start = clock(); + applySeparableGaussianBlur(inputImage, outputImage, 5, 5, kx, ky); + end = clock(); + double timeSpent = (double)(end - start) / CLOCKS_PER_SEC; + for (int i = 0; i < 5; i++) { + for (int j = 0; j < 5; j++) { + printf("%-4.1f ", outputImage[i][j]); + } + printf("\n"); + } + printf("The timeSpent is %1.32f second\n", timeSpent); +} \ No newline at end of file