您的位置:首页 > 其它

Implementation of Gaussian filter

2011-08-24 02:48 183 查看
代码片段,留作日后用。

vector<double> GaussianFilter(const vector<double> data, double standard_deviation, int filterlength)
{   //length of data

int length = data.size();

//position array of filter elements
int* position = new int[filterlength];
int middle = filterlength/2;
for(int i = 0; i <filterlength; i++)
{
position[i] = i - middle;
}
long double* gaussianCoeffiecients = new long double[filterlength];
long double temp1 = 1/sqrt(2* PI * square(standard_deviation));
long double temp2 = 2 * square(standard_deviation);
for(int i = 0; i <filterlength ; i++)
{
gaussianCoeffiecients[i] = temp1* exp(-square(position[i])/temp2);
}
//initilise result vector to be the same length
vector<double> result(length);

for (int i = 0 ; i < length; i++)
{
double temp = 0.0;
if(i < middle)
{
for(int j = middle - i ; j < filterlength; j++)
{
temp += data[i - middle + j] * gaussianCoeffiecients[j];
}
}
else if(i >= middle; i <= length - 1 - middle)
{
for(int j = 0; j < filterlength; j++)
{
temp += data[i-middle+j]* gaussianCoeffiecients[j];
}
}
else if (i > length - middle - 1)
{
int lastfilterelement = middle + difference(length,i)- 1;
for(int j = 0; j <  lastfilterelement; j++)
{
temp += data[i-middle+j]* gaussianCoeffiecients[j];
}
}
else
{//Not Possiable
}
result[i] = temp;
}
//memory clean up
delete[] gaussianCoeffiecients;
delete[] position;

//return result array
return result;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐