原理在于维护一个核的直方图数据,核的走向采用折线型,暂时没有对边界处理。
w:图像宽度
h:图像高度
n:中值滤波的核大小(n X n)
margin:设定边界的值,margin要大于n/2,否则程序会出错,这是由于没有对边界处理。
#define LEFT_MOVE 2 void medianFilterFast(unsigned char * data, int w, int h, int n, unsigned char* result, int margin) { //qq:945806570 }
测试下性能,medianBlur是opencv中的函数。
int cnt = 100; while (cnt--) { //medianFilter(image.data, image.size().width, image.size().height, 19, result.data, 20); medianFilterFast(image.data, image.size().width, image.size().height, 19, resultFast.data, 10); medianBlur(image, resultblur, 19); Sleep(1); }
结果: