C# 实现等直线平滑

最近在做一个项目(绘制等值线)但是在绘制出来后发现有很多类似锯齿状的地方不平滑,所以想找个方法实现平滑,但是在网上找了很多方法多不能达到理想的效果.

使用均值滤波试试。不过会降低幅值。
或者滑动平均滤波。
下面是我写的C++的滑动平均滤波函数
void ShiftMeanFilter(double *pDataBuffer, long bufferSize, short shiftLength)
{//滑动平均滤波

//确定采样队列长度
if (shiftLength < 4)
{
shiftLength = 4;
}
if (shiftLength >100)
{
shiftLength = 100;
}

double dbSum = 0;
double lastModify;

//计算第一采样队列的和并记住第一个位置的原始值
for (short k=0; k<shiftLength; k++)
{
dbSum += pDataBuffer[k];
}
lastModify = pDataBuffer[0];
pDataBuffer[0] = (double)(dbSum/shiftLength);

//开始向后滑动
long i;
for (i=1; i < bufferSize-shiftLength; i++)
{
dbSum += pDataBuffer[i+shiftLength]-lastModify;
lastModify = pDataBuffer[i];
pDataBuffer[i] = (double)(dbSum/shiftLength);
}

//最后一个采样队列所有的值都用i-1次获得的值填充
double lastMeanValue = pDataBuffer[i-1];
while (i < bufferSize)
{
pDataBuffer[i] = lastMeanValue;
i++;
}

}
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网