gpt4 book ai didi

c++ - 高斯模糊不均匀

转载 作者:行者123 更新时间:2023-11-28 03:02:44 25 4
gpt4 key购买 nike

我一直在尝试为我的图像编辑程序实现一个简单的高斯模糊算法。但是,我在完成这项工作时遇到了一些麻烦,我认为问题出在以下代码片段中:

        for( int j = 0; j < pow( kernel_size, 2 ); j++ )
{
int idx = ( i + kx + ( ky * img.width ));

//Try and overload this whenever possible
valueR += ( img.p_pixelArray[ idx ].r * kernel[ j ] );
valueG += ( img.p_pixelArray[ idx ].g * kernel[ j ] );
valueB += ( img.p_pixelArray[ idx ].b * kernel[ j ] );

if( kx == kernel_limit )
{
kx = -kernel_limit;
ky++;
}

else
{
kx++;
}
}

kx = -kernel_limit;
ky = -kernel_limit;

上面代码的简单解释:kernel size是高斯模糊公式生成的kernel(或matrix)的大小。 kxky 是用于迭代内核的变量。 i 是嵌套此循环的父循环,遍历图像中的每个像素。每个 value 变量只包含一个 float R、G 或 B 值,然后用于获取最终结果。 if-else 用于增加kxkyidx 用于查找正确的像素。 内核限制 是一个设置为

的变量
(*kernel size* - 1) / 2

所以我可以让 kx 从 -1(使用 3x3 内核)到 +1,对于 ky 也是如此。我认为问题出在线路上

int idx = ( i + kx + ( ky * img.width ));

但我不确定。我得到的图像是:

Lenna

可以看出,颜色在对角线方向模糊,看起来更像是某种运动模糊而不是高斯模糊。如果有人能提供帮助,我将不胜感激。

编辑:我填充内核的方式如下:

for( int i = 0; i < pow( kernel_size, 2 ); i++ )
{
// This. Is. Lisp.
kernel[i] = (( 1 / ( 2 * pi * pow( sigma, 2 ))) * pow (e, ( -((( pow( kx, 2 ) + pow( ky, 2 )) / 2 * pow( sigma, 2 ))))));

if(( kx + 1 ) == kernel_size )
{
kx = 0;
ky++;
}

else
{
kx++;
}
}

最佳答案

几个问题:

您的 Gaussian 在 2 * pow( sigma, 2 ) 周围缺少括号(即使您已经有很多..)。现在您乘以方差而不是除法。

但是你的问题是,你的高斯函数以 kx = ky = 0 为中心,因为你让它从 0 运行到 kernel_size,而不是从 -kernel_limitkernel_limit。这导致对角线模糊。像下面这样的东西应该会更好

kx = -kernel_limit;
ky = -kernel_limit;

int kernel_size_sq = kernel_size * kernel_size;

for( int i = 0; i < kernel_size_sq; i++ )
{
double sigma_sq = sigma * sigma;
double kx_sq = kx * kx;
double ky_sq = ky * ky;
kernel[i] = 1.0 / ( 2 * pi * sigma_sq) * exp(-(kx_sq + ky_sq) / (2 * sigma_sq));

if(kx == kernel_limit )
{
kx = -kernel_limit;
ky++;
}
else
{
kx++;
}
}

还要注意我是如何摆脱你的口齿不清和一些改进的:为了清晰起见,使用一些中间变量(如果你要求的话,编译器会优化它们);简单乘法比 pow(x, 2) 快; pow(e, x) == exp(x)

关于c++ - 高斯模糊不均匀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20350331/

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