所以我有一个非常大的Numpy阵列(2560x1920)。它实际上来自灰度图片,其中每个像素都有一个0-1的数字,表示它的亮度。
我正在尝试用零替换低于阈值的所有值,比如说0.5。 这可能是一个简单的任务,但我是Numpy的初学者,我已经四处搜索,仍然无法弄明白。
这是我尝试过的,我知道它错了......
for x in np.nditer(Image):
if x < .5:
x == 0
plt.imshow(Image, cmap=plt.cm.gray)
plt.show()
它只是输出正常图像而不改变任何东西。
此外,数组看起来像这样(显然缩写):
[[ 0.24565263 0.24565263 0.24902149 ..., 0.27528678 0.27265316
0.27606536]
[ 0.24565263 0.24565263 0.24902149 ..., 0.27870309 0.27606536
0.27948296]
[ 0.24228902 0.24228902 0.24565263 ..., 0.28212482 0.27948296
0.282906 ]
...,
[ 0.29706944 0.29706944 0.29706944 ..., 0.17470162 0.17144636
0.17144636]
[ 0.29362457 0.29362457 0.29362457 ..., 0.17144636 0.16495056
0.16170998]
[ 0.2901852 0.2901852 0.2901852 ..., 0.16819602 0.16170998
0.15847427]]
答案 0 :(得分:7)
有numpy的内置索引,可用于替换元素。这可以这样做:
Sub validationCombination1()
Columns("A:A").Select
formatDate
Columns("B:B").Select
formatInteger
End Sub
Sub validationCombination2()
Columns("A:A").Select
formatDate
conditionalFormat_Duplicates
Columns("B:B").Select
formatInteger
dataValidation_IntegersWithRange
End Sub
答案 1 :(得分:0)
我已经从未来回来提出建议。
上述方法适用于简单的全局阈值。 我发布这个答案警告说,根据你的申请,非适应性阈值处理可能太天真了。
如果不分析在不同条件下拍摄的多张照片,如果不适应图像的平均亮度或其他品质,输出将不一致。
有更准确的方法,但它们有点复杂。 Scikit-Image使这很容易。
最受欢迎的方法之一是Otsu(我不能说哪种情况对每种情况最准确,我还没有充分研究过)。 https://en.wikipedia.org/wiki/Otsu%27s_method
Scikit-Image在其模块中内置了一些其他算法。
使用这种方法,上述问题的答案就像这样简单:
import matplotlib.pyplot as plt
from skimage.filters import threshold_otsu
thresh = threshold_otsu(Image)
binary = Image > thresh
plt.imshow(Image, cmap=plt.cm.gray)
plt.show()
在这里阅读一个例子: http://scikit-image.org/docs/dev/auto_examples/plot_otsu.html
关于这里的用法: http://scikit-image.org/docs/dev/api/skimage.filters.html?highlight=local%20otsu