【发布时间】:2019-12-12 12:37:13
【问题描述】:
我有一个灰度图像和一个圆圈列表,我正在尝试计算图像的方差,同时排除位于其中一个圆圈内的任何像素。
我当前的实现非常慢(循环遍历图像并检查每个像素是否在其中一个圆圈内)。
我尝试将圆圈设置为图像的平均值(以消除它们对方差的影响),但这会产生不同的结果,因为平均值是在原始图像上计算的。
我能做些什么来让它更有效地运行?
def variance_without_circles(image, circles):
mean = 0
sum_squared = 0
count = 0
for i in range(image.shape[0]):
for j in range(image.shape[1]):
if is_in_circles(circles, i, j):
continue
else:
count += 1
val = image[i, j]
mean += val
sum_squared += val ** 2
mean = mean / count
variance = sum_squared / count - mean ** 2
return variance
def is_in_circles(circles, i, j):
for c in circles[0]:
if (c[0] - j)**2 + (c[1] - i)**2 < (c[2] ** 2):
return True
return False
【问题讨论】:
-
我认为如果您提供逼真的图像和现实的圆圈列表会有所帮助,以便我们知道我们在处理什么!如果做不到这一点,请复制图像并用黑色填充,即
mask = np.zeros_like(image),然后用白色绘制圆圈并计算方差的掩码数组。 -
酷 - 您可以将其添加为答案并自己接受(在 SO 上完全允许),以便其他人可以找到并查看正确答案,并且您可以获取积分。做得好,谢谢分享。
标签: python numpy computer-vision