Я хочу заполнить изображение за пределами круглой области ближайшим значением внутри круга. Эффект похож на режим skimage = 'edge', но применяется к круглой области изображения вместо прямоугольной angular области.
Простой код, который делает правильные вещи - очень медленно:
def circle_pad(img, xc, yc, r):
img_out = img.copy()
for i in range(img.shape[0]):
for j in range(img.shape[1]):
d = math.sqrt( (i-yc)**2 + (j-xc)**2 )
if d > r:
i1, j1 = int( yc + (i-yc)*(r/d) ), int( xc + (j-xc)*(r/d) )
img_out[i,j] = img[i1,j1]
return img_out
Как это ускорить с помощью numpy? (возможно, избегайте зацикливания на каждом пикселе в коде python; типичные изображения составляют десятки миллионов пикселей)
Я подумал об использовании чего-нибудь вдоль линий сетки в качестве отправной точки для вычисления координат значения для заполнения в каждой точке, но как это сделать неясно.