c语言实现中值滤波

如何在不改变数组顺序,又不创建新数组的情况下进行中值滤波呢?

这个问题我在网上找了好久,都又创建了一个一样的数组,然后把数据复制过去,再排序找出中间值。我觉得这个办法是可以实现可是总觉得很麻烦。

那就只能自己想自己写了。

void middistance(float* distance)
{
    unsigned char count = 0, MarkNum, CompareNum, equal = 0,
    float midval = 0;
    for (MarkNum = 0; MarkNum < MAX_LDFEOFFSET; MarkNum++) {
		midval = distance[MarkNum];

		for (CompareNum = 0; CompareNum < MAX_LDFEOFFSET; CompareNum++) {
			if (MarkNum == CompareNum) {
				continue;
			}

			/*相等情况*/
			if (midval  == distance[CompareNum]) {
				equal++;

				if (equal == MAX_LDFEOFFSET / 2) {
					distance[MAX_LDFEOFFSET] = midval ;
					return;
				}
			}

			/*大于情况*/
			if (midval > distance[CompareNum]) {
				count ++;
			}

		}

		/* 判断大于和等于个数 */
		if ((count <= MAX_LDFEOFFSET / 2) && ((count + equal) >= MAX_LDFEOFFSET / 2)) {
			distance[MAX_LDFEOFFSET] = midval ;
			return;
		}

		equal = 0;
		count = 0;
	}

	debugError("\r\nMedian filter error\r\n");
}

这里面还有一个,就是我定义distance[]数组时是这么定义的

float distance[MAX_LDFEOFFSET +1]       //最后一个元素放中值

MAX_LDFEOFFSET 为数组元素个数

这就有后面的"distance[MAX_LDFEOFFSET] = midval ;"

正常情况下是走不到"debugError("\r\nMedian filter error\r\n");"的

以上都是自己想的,谁有什么不懂的或者有什么更好、更简便的方法,还请不吝赐教。

你可能感兴趣的:(c语言小技巧)