许多函数scipy.ndimage
接受一个可选mode=nearest|wrap|reflect|constant
参数,该参数确定如何处理函数需要来自图像区域之外的一些数据(填充)的情况。填充由本机代码中的NI_ExtendLine()内部处理。
我不想在填充数据上运行 ndimage 函数,而是只想使用与 ndimage 使用的填充模式相同的填充模式来获取填充数据。
这是一个示例(仅适用于 mode=nearest,假设为 2d 图像):
"""
Get padded data. Returns numpy array with shape (y1-y0, x1-x0, ...)
Any of x0, x1, y0, y1 may be outside of the image
"""
def get(img, y0, y1, x0, x1, mode="nearest"):
out_img = numpy.zeros((y1-y0, x1-x0))
for y in range(y0, y1):
for x in range(x0, x1):
yc = numpy.clip(y, 0, img.shape[0])
xc = numpy.clip(x, 0, img.shape[1])
out_img[y-y0, x-x0] = img[yc, xc]
return out_img
这是正确的,但速度很慢,因为它一次迭代一个像素。
最好(最快、最清晰、最 Pythonic)的方法是什么?