C 15x15高斯掩模
当我在谷歌上搜索时,我在c语言中遇到了一个5x5高斯掩码代码。。 但我需要15x15高斯遮罩,所以我只是这样修改C 15x15高斯掩模,c,image-processing,mask,gaussian,C,Image Processing,Mask,Gaussian,当我在谷歌上搜索时,我在c语言中遇到了一个5x5高斯掩码代码。。 但我需要15x15高斯遮罩,所以我只是这样修改 void createFilter(double gKernel[][15]) { // set standard deviation to 1.0 double sigma = 7.0; double r, s = 2.0 * sigma * sigma; // sum is for normalization double sum = 0
void createFilter(double gKernel[][15])
{
// set standard deviation to 1.0
double sigma = 7.0;
double r, s = 2.0 * sigma * sigma;
// sum is for normalization
double sum = 0.0;
// generate 5x5 kernel
//for (int x = -2; x <= 2; x++)
for (int x = -7; x <= 7; x++)
{
//for (int y = -2; y <= 2; y++)
for (int y = -7; y <= 7; y++)
{
r = sqrt(x*x + y*y);
gKernel[x + 7][y + 7] = (exp(-(r*r) / s)) / (M_PI * s);
sum += gKernel[x + 7][y + 7];
}
}
// normalize the Kernel
for (int i = 0; i < 15; ++i)
for (int j = 0; j < 15; ++j)
gKernel[i][j] /= sum;
}
void createFilter(双gKernel[][15])
{
//将标准偏差设置为1.0
双西格玛=7.0;
双r,s=2.0*sigma*sigma;
//求和用于规范化
双和=0.0;
//生成5x5内核
//对于(int x=-2;x),我们如何知道您认为什么是“正确的”?另一方面,仅计算平方根以使下面一行的结果平方似乎不合理。@hidefromkgb该计算确实可以进行大量优化。从预先计算常数到利用对称性。整个过程是一个常数,可以硬编码。可能sigma太高了,为7.0。您的公式似乎不正确o匹配维基百科上的公式-除数是一个常数√(2π∑²)但您似乎在使用该值的平方(或者没有使用括号中表达式的平方根)。如果您没有显示您的期望值和得到的值,则很难知道其他方法可以帮助您。我们如何知道您认为“正确”的内容?另一方面,仅计算平方根以使下面一行的结果平方似乎不合理。@hidefromkgb该计算确实可以进行大量优化。从预先计算常数到利用对称性。整个过程是一个常数,可以硬编码。可能sigma太高了,为7.0。您的公式似乎不正确o匹配维基百科上的公式-除数是一个常数√(2π∑²)但您似乎在使用该值的平方(或者没有使用括号中表达式的平方根)。如果不显示您的期望值和得到的值,则很难知道还有什么其他方法可以帮助您。