我想了解Gimp中的高斯模糊如何工作。我下载的代码,我可以差不多了解一些事情......但我对其他事情感到困惑。Gimp高斯模糊 - 代码解释
下面的代码:
make_rle_curve (gdouble sigma,
gint **p_curve,
gint *p_length,
gint **p_sum,
gint *p_total)
{
const gdouble sigma2 = 2 * sigma * sigma;
const gdouble l = sqrt (-sigma2 * log (1.0/255.0));
gint temp;
gint i, n;
gint length;
gint *sum;
gint *curve;
n = ceil (l) * 2;
if ((n % 2) == 0)
n += 1;
curve = g_new (gint, n);
length = n/2;
curve += length; /* 'center' the curve[] */
curve[0] = 255;
for (i = 1; i <= length; i++)
{
temp = (gint) (exp (- (i * i)/sigma2) * 255);
curve[-i] = temp;
curve[i] = temp;
}
sum = g_new (gint, 2 * length + 1);
sum[0] = 0;
for (i = 1; i <= length*2; i++)
{
sum[i] = curve[i-length-1] + sum[i-1];
}
sum += length; /* 'center' the sum[] */
*p_total = sum[length] - sum[-length];
*p_curve = curve;
*p_sum = sum;
*p_length = length;
对于我来说,曲线和2个阵列。那张曲线从假设-3至+3
,并和从0到6。换句话说,我有
curve[-3] = ...
curve[0] = 255
curve[3] = ...
但到底是什么curve = curve + length
真的呢? 同样的事情,sum = sum + length
做什么?
非常感谢您的帮助!
PS:我不是在编码天才:(
你好informaton, 非常感谢您的详细解答。我得到了与曲线 点,但我不明白与“总和”。 “曲线”居中之前,则设置值(curve [i] = curve [-i] = temp)。 – kalonkadour
“sum”在定义值后居中。那么,我想以sum [-1]为例得到什么呢? (让我们假设总和[1] = 4) 请您澄清一下吗?非常感谢你 ! – kalonkadour
没错。我会更新我的答案,因为添加评论太长。 – informaton