我正在使用图像编辑器,并且即将实现过滤器。我决定使用某种模糊或噪点。

无论如何,我决定我想要一个统一的过滤器,所以我阅读了Random.nextGaussian()

但是,由于我正在使用范围从0到255的RGB值。如何缩放此随机双精度值以适合0和255?

我相信nextGaussian()返回的随机值的范围是-1至1。

因此,我想保留随机值之间的相对差异。如果可以的话,请“缩放”或“移动数字范围”。

我知道有可能,但我不知道。提前致谢。

本质上,我需要它是介于0和1之间的数字。

最佳答案

在这种情况下,您应该使用nextDouble()

高斯分布是分布在整个双值集合上的分布(从数学上来说,从减去无穷大正无穷大),峰值在零附近。因此,高斯分布为而不是均匀
nextDouble()方法在01(包括0,不包括1)之间均匀地绘制数字

因此,您可以使用以下代码在0255(包括两者)之间随机绘制一个数字:

Random rand = new Random();
int value = (int) math.floor(256.0*rand.nextDouble());

但是,一种更快的算法是屏蔽随机整数(Random.nextInt):
Random rand = new Random();
int value = rand.nextInt()&0xff;

该算法在big-oh分析中并不是更快,但是它节省了更昂贵的nextDouble方法调用以及浮点乘法和float-to-int转换。

10-02 09:25