我正在做一个图像编辑器,我打算实现过滤器。我决定用一些模糊或噪音。
无论如何,我决定我想要一个统一的过滤器,所以我读了关于Random.nextGaussian()
。
但是,由于我使用的RGB值范围从0到255,我如何缩放这个随机双精度值以适应0到255之间的范围?
我相信nextGaussian()返回的随机值的范围可以从-1到1。
所以,我想保留随机值之间的相对差异。“缩放”或“移动数字范围”如果有意义的话。
我知道这是可能的,但我想不出来。提前感谢。
实际上,我需要它是一个介于0和1之间的数字。
3条答案
按热度按时间u1ehiz5o1#
在这种情况下,您应该使用
nextDouble()
。nextDouble()
方法在0
和1
(包括0
,不包括1
)之间均匀绘制数字。因此,您可以使用下列程式码,在
0
和255
(两者都包括在内)之间随机绘制数字:然而,更快的算法是掩码随机整数(
Random.nextInt
):这种算法在big-oh分析中速度并不快,但它节省了更昂贵的
nextDouble
方法调用以及浮点乘法和浮点到整型的转换。2skhul332#
可以将nextGaussian()与Math.abs()结合使用,以便获得高斯分布的正值。
mec1mxoz3#
您可以通过调整平均值和标准差来拟合~[0,1]之间的正态(高斯)分布。例如,使用mean = 0.5,std = 0.15,您将以99.91%的总概率得到介于[0,1]之间的值。最终,您可以确保值严格介于[0,1]之间。