【发布时间】:2018-01-11 19:25:05
【问题描述】:
我试图了解 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;
对我来说,curve 和 sum 是 2 个数组。曲线从-3到+3
和从 0 到 6。换句话说,我有
curve[-3] = ...
curve[0] = 255
curve[3] = ...
但是curve = curve + length 到底做了什么?
同样的事情,sum = sum + length 做了什么?
非常感谢您的帮助!
ps:我不是编码天才:(
【问题讨论】: