#include #include #include "common.h" int comp(unsigned char *, unsigned char *); Image_data * SmoothMedian(Image_data *piData, int windowsize) { int index, x, y, i, j, hwin, win2, index_of_median; Image_data *pproData; unsigned char *array; // ----------- Memory allocation stuff --------------// array = malloc(windowsize * windowsize); pproData = malloc(sizeof(Image_data)); pproData->image_G_ptr = malloc(piData->n_rows * piData->n_cols); pproData->n_cols = piData->n_cols; pproData->n_rows = piData->n_rows; lstrcpy(pproData->filename, "Median Smoothed Image"); // -------------------------------------------------// hwin = windowsize / 2; win2 = windowsize * windowsize; index_of_median = win2/2 + 1; for (x = hwin; x < piData->n_cols - hwin; x++) for (y = hwin; y < piData->n_rows - hwin; y++) { index = 0; for (i = x - hwin; i <= x + hwin; i++) for (j = y - hwin; j <= y + hwin; j++) { array[index] = piData->image_G_ptr[j * piData->n_cols + i]; ++index; } qsort((void *)array, win2, sizeof(unsigned char), comp); pproData->image_G_ptr[y * piData->n_cols + x] = array[index_of_median]; } free(array); return pproData; } int comp(unsigned char *i, unsigned char *j) { return *i - *j; }