我真的不知道怎么说这个问题,这很奇怪。
我有一个强度值的1d数组和一个边界框(数组中的整数起点和终点)。我想保持边界框内的值相同,但是以指数方式减小框外的值(即它们离它们越远它们越少)。应该看起来像一个高斯的高斯,在边界框的位置。任何人都可以举例说明我该如何做到这一点?今晚我的大脑不能正常工作,谢谢。
更新:
我用过这个:
if (j < low) a[j] *= Logistic(t*(j + (6f/t) - low));
else if (j > high) a[j] *= Logistic(-t*(j - (6f/t) - high));
private double Logistic(double x)
{
return (1 / (1 + Math.Exp(-x)));
}
答案 0 :(得分:1)
您是否指数如何减少,任意接近0?
value = 1 / e^(distance)
或者当你进一步向外移动时,首先快速增加并且缓慢增加的东西,即。指数的倒数?
value = ln(distance)
如果你想要类似的东西(一开始就快速增加,当你越走越慢时)有界,请参阅sigmoid曲线上的this answer。
答案 1 :(得分:1)
像
这样的东西if (n<low)
a[n] *= exp(-t*(low-n));
else if (n>high)
a[n] *= exp(-t*(n-high));
else
a[n] *= 1.0;
带参数t?实际上可以省略最后一个分支。
答案 2 :(得分:0)
你想要砍掉高斯的驼峰吗?
高斯就像I = I_0 exp(-aX^2)
。您的I
X
位于边框宽度的一半处I_0
。然后,您可以使用a
和I_0
,直到获得所需内容(选择a
获取相应的X
,反之亦然。)
(另外,X
偏移到边界框的中心。上面的公式适用于{{1}} = 0。)