0

我正在尝试在存储为 tif 的卫星衍生栅格上运行阈值算法。算法中正在考虑出现在场景边界上的无数据值 (-3.40282306e+38) 并导致不良行为。我正在寻找一种在运行阈值算法之前删除所有没有数据值的行/列的方法。

我试图将所有没有数据值的单元格设置为 np.nan 然后删除它们,但我没有得到我正在寻找的结果。

我的代码:

import numpy as np
from skimage import filters
from skimage import exposure
from skimage.io import imread, show
from skimage.filters import try_all_threshold

no_data_value = -3.40282306e+38

ndwi = imread(<'my.tif'>)
ndwi[ndwi == no_data_value] = np.nan
ndwi = ndwi[~np.isnan(ndwi).any(axis=1)]
val = filters.threshold_otsu(ndwi)
4

3 回答 3

1

filters.threshold_otsu不关心传入的数组的形状,所以你也可以这样做:

threshold_otsu(z[z > -1])
于 2017-11-30T22:10:35.893 回答
0

两件事情,

您的值可能不完全是 -3.40282306e+38。如果没有其他东西是那么大的负值,我可能会将过滤器更改为 -3e+38 之类的东西。

另外我认为您在“不为空”过滤器的开头缺少您的数组。这一行就在这里“ndwi = nwdi[~np.isnan(ndwi)]”

no_data_value = -3.0e+38
ndwi = imread(<my.tif>)
ndwi[ndwi <= no_data_value] = np.nan
ndwi = nwdi[~np.isnan(ndwi)]
val = filters.threshold_otsu(ndwi)
于 2017-11-30T17:39:02.510 回答
0

我的栅格值范围从 -1 到 1 如此变化

ndwi[ndwi == no_data_value] = np.nan

ndwi[ndwi <= -1] = np.nan

给了我想要的结果。似乎有点hack但有效。

于 2017-11-30T17:56:13.010 回答