【发布时间】:2020-06-30 06:11:06
【问题描述】:
我正在尝试掩盖从检测器获取的数据集中的坏像素。为了想出一个通用的方法来做到这一点,以便我可以在不同的图像上运行相同的代码,我尝试了几种不同的方法,但没有一个最终能奏效。我对 Python 中的编码和数据分析非常陌生,所以我可以用手将事物按照计算机可以理解的方式来表达。
例如,考虑矩阵
A = np.array([[3,5,50],[30,2,6],[25,1,1]])
我想要做的是将 A 中与平均值相差两个标准差的任何元素设置为零。原因是在后面的代码中,我定义了一个只使用非零值进行计算的函数,因为零是掩码的一部分。
我知道这种屏蔽技术有效,但我尝试扩展以下代码以处理标准偏差:
mask = np.ones(np.shape(A))
mask.flat[A.flat > 20] = 0
我尝试的是:
mask = np.ones(np.shape(A))
for i,j in A:
mask.flat[A[i,j] - 2*np.std(A) < np.mean(A) < A[i,j] + 2*np.std(A)] = 0
哪个会引发错误:
ValueError:解包的值太多(预计 2 个)
如果有人有更好的技术来统计去除图像中的坏像素,我会全力以赴。感谢您的帮助!
===========
编辑
经过反复试验,我找到了一个可以帮助澄清我的问题的地方。新代码是:
for i in A:
for j in i:
mask.flat[ j - 2*np.std(A) < np.mean(A) < j + 2*np.std(A)] = 0
这会引发“不支持的迭代器索引”错误。我想要发生的是 for 循环遍历数组中的每个元素,检查它是否小于/大于平均值的 2 个标准偏差,并且将其设置为零。
【问题讨论】:
标签: python numpy image-processing data-analysis masking