下面的代码计算整个图片的局部对比度。我的版本真的很慢。我尝试过使用‘multiprocessing’模块中的'pool‘进行多线程处理,但速度只提高了10%。
你能帮我把速度再加快一点吗?
#pic: gray value picture (large 2d-array)
#xvar,yvar: scalar values, e.g. 200
contrast=[np.std(pic[stepx-xvar:xvar+stepx:,stepy-yvar:yvar+stepy:])*2 \
for ystep in np.arange(yvar,np.int(pic.shape[1]-yvar),1)] \
for stepx in np.arange(xvar,np.int(pic.shape[0]-xvar),1)]发布于 2015-09-16 01:38:47
最直接的方法是:
from skimage.util import view_as_windows
windows = view_as_windows(pic, (xvar, yvar))
contrast = 2 * np.std(windows, axis=(2,3))这会将图片放大为包含所有窗口的数组,但不会产生额外的内存开销。这样做的好处是消除了Python循环/函数调用的开销。它基于Numpy的“大步技巧”,参见实现here (或者,scikit-learn variant)。
不过,有一种方法的伸缩性要好得多,请参阅此处的答案:improving code efficiency: standard deviation on sliding windows
https://stackoverflow.com/questions/32589348
复制相似问题