我有一个图像表示为分布不均的uint16 numpy数组(orig_arr
)。我想创建一个随机值的新数组(noise_arr
),但它与orig_img
的均值和标准差匹配。
我相信这将需要两个主要步骤:
orig_arr
的均值和分布我对如何执行此操作相当迷失,但这是示例图像和一些入门代码:
示例图片: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
答案 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
并设置vmin
和vmax
将使您查看对范围敏感的数据图像或热图。上面的链接中也对此进行了演示。
希望有帮助!