我的任务是模拟一个相机,每个传感器元件的满孔容量为10.000光子在numpy中。我的第一个想法就是这样做:
camera = np.random.normal(0.0,1/10000,np.shape(img))
Imgwithnoise= img+camera
但是几乎没有效果。有人知道怎么做吗?
根据我对您的问题的解释,如果传感器的每个物理像素都具有10,000个光子限制,则表明最亮数字像素可以位于图像上。同样,0个入射光子使图像的像素最暗。
您必须创建从物理传感器到数字图像的地图。为了简单起见,假设我们使用灰度图像。您的第一个任务是修复图像的颜色位深度。也就是说,您的图像是8位彩色图像吗? (通常是这种情况)如果是这样,则最亮的像素的亮度值 = 255(= 2 8-1,对于8位。)最暗的像素始终选择为具有值0 。
因此,您必须将0 --> 10,000
(传感器)到0 --> 255
(图像)的范围映射。最自然的想法是做一个线性映射(即,图像的每个像素都是通过相同的乘法因子从传感器的每个像素获得的),但是要正确地解释(根据人眼)由[C0 ]入射光子,通常使用不同的传递函数。简化版本中的传递函数只是执行此映射的数学函数-对数TF非常常见。
而且,由于似乎正在产生噪声,因此将n
本身添加到图像camera
上是不明智的,从概念上讲也是错误的。您应该做的是首先固定noise threshold-这可以对应于可以影响像素读数的最大光子数作为最大噪声值。然后,您将生成img
范围内的随机数(如果需要,根据某些分布)。最后,您可以使用之前创建的地图将此噪声添加到图像阵列。
希望这会有所帮助,并且与您想做的事情保持一致。干杯!