gpt4 book ai didi

c++ - 我在 C++ 中的二维数组高斯模糊函数有什么问题?

转载 作者:行者123 更新时间:2023-12-03 06:53:41 25 4
gpt4 key购买 nike

我正在为一个应该表示图像的二维数组制作一个简单的高斯模糊函数。该函数只是在最后打印出数组值(这里没有进行实际的图像处理)。我很确定我已经正确实现了所有内容,但是我得到的值 (N=3, sigma=1.5) 比基于此计算器的预期值低得多:http://dev.theomader.com/gaussian-kernel-calculator/

我遵循这个等式:

enter image description here

void gaussian_filter(int N, double sigma) {

double k[N][N];
for(int i=0; i<N; i++) { //Initialize kernal to 0
for(int j=0; j<N; j++) {
k[i][j] = 0;
}
}

double sum = 0.0; //There is an issue somewhere in this block of code
int change = (N/2);
double r, s = change * sigma * sigma;
for (int x = -change; x <= change; x++) {
for(int y = -change; y <= change; y++) {
r = sqrt(x*x + y*y);
k[x + change][y + change] = (exp(-(r*r)/s))/(M_PI * s);
sum += k[x + change][y + change];
}
}

for(int i = 0; i < N; ++i) { //Normalize
for(int j = 0; j < N; ++j) {
k[i][j] /= sum;
}
}

for(int i = 0; i < N; ++i) { //Print out array
for (int j = 0; j < N; ++j)
cout<<k[i][j]<<"\t";
}
cout<<endl;
}
}

这是 N=3 和 Sigma=1.5 的预期输出 enter image description here

这是 N=3 和 Sigma=1.5 的当前损坏输出 enter image description here

最佳答案

为什么 s 依赖于 change?我认为你应该这样做:

double r, s = 2 * sigma * sigma;
// instead of
// double r, s = change * sigma * sigma;

关于c++ - 我在 C++ 中的二维数组高斯模糊函数有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64164250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com