の多くの関数は、関数がイメージの領域外 (パディング) からのデータを必要とする場合の処理方法を決定する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
これは正しいことを行いますが、一度に 1 ピクセルずつ反復するため遅くなります。
これを行うための最良の(最も速く、最も明確で、最もpythonicな)方法は何ですか?