#include #include #include "abaxCommon.h" /* 寻找中值 */ static float getMidNum(float *nums, int len) { int i, j; int minIdx; float tmp; for (i = 0; i < len / 2 + 1; i++) { minIdx = i; for (j = i; j < len; j++) { if (*(nums+j) < *(nums+minIdx)) { minIdx = j; } } tmp = *(nums+i); *(nums+i) = *(nums+minIdx); *(nums+minIdx) = tmp; } return nums[i - 1]; } /* 图像中值滤波 */ int midNumFilter(float *src, float *dst, int width, int height, int winSize) { int border = winSize / 2; float *nums = new float[winSize * winSize]; int offset, offsetw; int i, j, m, n, k; float result; for (i = border; i < height - border - 1; i++) { offset = i * width; for (j = border; j < width - border; j++) { k = 0; for (m = i - border; m < i + border + 1; m++) { offsetw = m * width; for (n = j - border; n < j + border + 1; n++) { *(nums+k) = *(src+offsetw + n); k++; } } result = getMidNum(nums, k); *(dst+offset + j) = result; } } for(i = 0;i