我想用圆内最近的值填充圆形区域外的图像。其效果类似于skimage的mode='edge',但应用于图像的圆形区域而不是矩形区域
做正确事情的简单代码-速度非常慢:
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代码中循环每个像素;典型的图像是数千万像素)
我曾想过使用网格线沿线的东西作为起点来计算要在每个点上填充的值的坐标,但方法不清楚
使用mgrid解决了这个问题-虽然不漂亮,但速度很快。以防万一,它对其他有类似图像处理问题的人很有用:
关键部分是:
xi, yi
,其中np.mgrid
-每个数组与图像大小相同img[ye,xe]
相关问题 更多 >
编程相关推荐