我试图在一个储存为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)
有两件事
你的值可能不完全是-3.40282306e+38。如果没有其他东西是那么大的负值,我可能会把过滤器改成-3e+38。在
另外,我认为您在“is not null”过滤器的开头缺少数组。这里的这一行“ndwi=nwdi[~np.伊斯南(ndwi)]
我的光栅值的范围是从-1到1,所以变化很大
到
^{pr2}$给我想要的结果。看起来有点老套,但很管用。在
filters.threshold_otsu
不关心传入的数组的形状,因此您也可以执行以下操作:相关问题 更多 >
编程相关推荐