创建与其他图像具有相同均值和(偏斜)分布的随机噪声图像

时间:2019-02-08 21:07:40

标签: python

我有一个图像表示为分布不均的uint16 numpy数组(orig_arr)。我想创建一个随机值的新数组(noise_arr),但它与orig_img的均值和标准差匹配。

我相信这将需要两个主要步骤:

  1. 测量orig_arr的均值和分布
  2. 使用步骤1中测得的均值和分布创建一个新的随机值数组

我对如何执行此操作相当迷失,但这是示例图像和一些入门代码:

示例图片:https://drive.google.com/open?id=1bevwW-NHshIVRqni5O62QB7bxcxnUier(看起来空白,但不是空白)

orig_arr = cv2.imread('sample_img.tif', -1)
orig_mean = np.mean(orig_arr)
orig_sd = np.std(orig_arr)

print(orig_mean)
18.676384933578962

print(orig_sd)    
41.67964688299941

1 个答案:

答案 0 :(得分:1)

我认为scipy.stats.skewnorm可以解决问题。它使您可以表征倾斜的正态分布,还可以从倾斜的正态分布中采样数据。

现在...也许这是对您的数据的错误假设...也许它不是偏斜正常的,但这是我要尝试的第一件事。

# import skewnorm
from scipy.stats import skewnorm

# find params
a, loc, scale = skewnorm.fit(orig_arr)

# mimick orig distribution with skewnorm
# keep size and shape the same as orig_arr
noise_arr = skewnorm(a, loc, scale).rvs(orig_arr.size).astype('uint16').reshape(orig_array.shape)

关于探索这类数据的更多信息……将其绘制出来……进行比较……在这里:How to create uint16 gaussian noise image?

还...我认为使用imshow并设置vminvmax将使您查看对范围敏感的数据图像或热图。上面的链接中也对此进行了演示。

希望有帮助!