试图处理大型卫星图像(~10GB).对于存储器有效处理,在每次迭代中将图像块(block/ tile)加载到存储器中.
示例代码如下:
def process_image(src_img, dst_img, band_id=1):
with rasterio.open(src_img) as src:
kwargs = src.meta
tiles = src.block_windows(band_id)
with rasterio.open(dst_img, 'w', **kwargs) as dst:
for idx, window in tiles:
print("Processing Block: ", idx[0]+1, ", ", idx[1]+1)
src_data = src.read(band_id, window=window)
dst_data = src_data ** 2 # Do the Processing Here
dst.write_band( band_id, dst_data, window=window)
return 0
Run Code Online (Sandbox Code Playgroud)
然而,对于需要内核方式操作的任何类型的处理(例如任何convolve类似的滤波器smoothing),这导致在块的边缘附近的处理中的问题.为解决此问题,每个块应略微重叠,如下所示:
我的目标是按以下方式加载块,其中可以根据需要调整重叠量.
到目前为止,我没有找到任何直接的方法来实现这一目标.在这方面我会感激不尽.
我有一个包含按特定顺序排列的字典键的ndarray.我想创建另一个包含相应键值的ndarray.必须保持订单.显而易见的方法是逐个元素迭代包含键的数组,但问题是没有办法事先知道数组的形状.
是否有可能压平关键字的ndarray并迭代它以生成平坦的数值,并最终在不损害订单的情况下解开它?
mydict = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
input_pattern = np.array([['a', 'f'], ['b', 'e'], ['c', 'd']])
expected_output = np.array([[1, 6], [2, 5], [3, 4]])
Run Code Online (Sandbox Code Playgroud)
注意:在上面的示例中,模式数组是2D,但可能并非总是如此.它也可能不包含字典的所有键.