我正在寻找一种有效的方法来有效地将图像分成小区域,分别处理每个区域,然后将每个过程的结果重新组合成单个处理过的图像.Matlab有一个名为blkproc的工具(blockproc在较新版本的Matlab中取代).
在理想世界中,函数或类也支持输入矩阵中的分区之间的重叠.在Matlab帮助中,blkproc定义为:
B = blkproc(A,[mn],[mborder nborder],有趣,...)
我已经采取了一种方法,但它让我觉得笨拙,我敢打赌,这是一个更好的方法.冒着我自己的尴尬,这是我的代码:
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) 我在这里有类似的问题
这个问题与tiff数据类似,我想找到一种更通用的方法来处理它.
例如:
http://i4.tietuku.com/060fe38e9ccf6daf.png
这是随机分布式数据集群到网格网络的示例图片 http://i4.tietuku.com/a4c1355413f8cdbc.png
*红点:原始数据
*蓝点:网格表示二维数组*绿色圆圈:找到每个红点最近的蓝点并求它们.
*在这个问题中,区别在于原始数据也是2-d numpy数组.
与我在这里的另一个问题类似,我将2-d散点指向最近的网格点.我很欣赏@HYRY支持的答案,它改进了我的代码.
在那个问题中,我使用KD树算法来查找每个原始点数据的最近网络节点.结果显示在这里:http:
//i4.tietuku.com/1a420c48ed7bcb1c.png
我认为必须有一些更简单的方法来重塑结构化的2-d numpy数组而不是随机的2-d散点.
感谢@Praveen的回答.
我有另一种使用scipy interpolate 2d函数的方法.
这是我的代码:
xi = np.linspace(x_map1,x_map2,pop.shape[1])
yi = np.linspace(y_map1,y_map2,pop.shape[0])
hfunc = interpolate.interp2d(xi,yi,pop)
x_grid = np.linspace(x_map1,x_map2,new_shape_x)
y_grid = np.linspace(y_map1,y_map2,new_shape_y)
new_pop = np.zeros(new_shape_x * new_shape_y)
t = 0
for i in range(0,new_shape_y,1):
for j in range(0,new_shape_y,1):
new_pop[t] = hfunc(x_grid[j],y_grid[i])
t+=1
new_pop = …Run Code Online (Sandbox Code Playgroud)