相关疑难解决方法(0)

如何在类似于Matlab的blkproc(blockproc)函数的块中有效地处理numpy数组

我正在寻找一种有效的方法来有效地将图像分成小区域,分别处理每个区域,然后将每个过程的结果重新组合成单​​个处理过的图像.Matlab有一个名为blkproc的工具(blockproc在较新版本的Matlab中取代).

在理想世界中,函数或类也支持输入矩阵中的分区之间的重叠.在Matlab帮助中,blkproc定义为:

B = blkproc(A,[mn],[mborder nborder],有趣,...)

  • A是你的输入矩阵,
  • [mn]是块大小
  • [mborder,nborder]是边界区域的大小(可选)
  • fun是一个应用于每个块的函数

我已经采取了一种方法,但它让我觉得笨拙,我敢打赌,这是一个更好的方法.冒着我自己的尴尬,这是我的代码:


import numpy as np

def segmented_process(M, blk_size=(16,16), overlap=(0,0), fun=None):
    rows = []
    for i in range(0, M.shape[0], blk_size[0]):
        cols = []
        for j in range(0, M.shape[1], blk_size[1]):
            cols.append(fun(M[i:i+blk_size[0], j:j+blk_size[1]]))
        rows.append(np.concatenate(cols, axis=1))
    return np.concatenate(rows, axis=0)

R = np.random.rand(128,128)
passthrough = lambda(x):x
Rprime = segmented_process(R, blk_size=(16,16), 
                           overlap=(0,0), 
                           fun=passthrough)

np.all(R==Rprime)
Run Code Online (Sandbox Code Playgroud)

python matlab numpy image-processing scipy

25
推荐指数
3
解决办法
1万
查看次数

标签 统计

image-processing ×1

matlab ×1

numpy ×1

python ×1

scipy ×1