这可能无法很好地适应您的数据大小,但它是我找到的一个代码片段(不记得在哪里)并在我的图像处理函数中使用以获得 9 个无符号字符像素的中位数。
// optimised median search on 9 values
#define PIX_SWAP(a, b) { unsigned char uTemp = (a); (a) = (b); (b) = uTemp; }
#define PIX_SORT(a, b) { if ((a) > (b)) PIX_SWAP((a), (b)); }
unsigned char GetMedian9(unsigned char *pNine)
{
// nb - this is theoretically the fastest way to get the median of 9 values
PIX_SORT(pNine[1], pNine[2]); PIX_SORT(pNine[4], pNine[5]); PIX_SORT(pNine[7], pNine[8]);
PIX_SORT(pNine[0], pNine[1]); PIX_SORT(pNine[3], pNine[4]); PIX_SORT(pNine[6], pNine[7]);
PIX_SORT(pNine[1], pNine[2]); PIX_SORT(pNine[4], pNine[5]); PIX_SORT(pNine[7], pNine[8]);
PIX_SORT(pNine[0], pNine[3]); PIX_SORT(pNine[5], pNine[8]); PIX_SORT(pNine[4], pNine[7]);
PIX_SORT(pNine[3], pNine[6]); PIX_SORT(pNine[1], pNine[4]); PIX_SORT(pNine[2], pNine[5]);
PIX_SORT(pNine[4], pNine[7]); PIX_SORT(pNine[4], pNine[2]); PIX_SORT(pNine[6], pNine[4]);
PIX_SORT(pNine[4], pNine[2]); return(pNine[4]);
}
#undef PIX_SWAP
#undef PIX_SORT
编辑- 好的,这个答案也引用了它