gdal中的方差图像
我想要一个使用 python 的具有 3x3 地理空间光栅图像的局部方差图像。到目前为止,我的方法是将光栅带作为数组读取,然后使用矩阵表示法运行移动窗口并将数组写入新的光栅图像。这种方法适用于本教程中描述的高通滤波器:http: //www.gis.usu.edu/~chrisg/python/2009/lectures/ospy_slides6.pdf
然后我尝试用几种方法计算方差,最后一种方法使用 numpy(作为 np),但我只是得到一个到处都有相同值的灰色图像。我对任何类型的解决方案持开放态度。如果它最终给了我平均局部方差,那就更好了。
rows = srcDS.RasterYSize
#read in as array
data = srcBand.ReadAsArray(0,0, cols, rows).astype(np.int)
#calculate the variance for a 3x3 window
outVariance = np.zeros((rows, cols), np.float)
outVariance[1:rows-1,1:cols-1] = np.var([(data[0:rows-2,0:cols-2]),
(data[0:rows-2,1:cols-1]),
(data[0:rows-2,2:cols] ),
(data[1:rows-1,0:cols-2]),
(data[1:rows-1,1:cols-1]),
(data[1:rows-1,2:cols] ),
(data[2:rows,0:cols-2] ),
(data[2:rows,1:cols-1] ),
(data[2:rows,2:cols] )])
#output
outDS = driver.Create(outFN, cols, rows, 1, GDT_Float32)
outDS.SetGeoTransform(srcDS.GetGeoTransform())
outDS.SetProjection(srcDS.GetProjection())
outBand = outDS.GetRasterBand(1)
outBand.WriteArray(outVariance,0,0)
...