我正在用Python进行瑕疵消除的工作。为了参考如何实现瑕疵消除,我已经阅读了以下代码:Blemish Removal。去除瑕疵所需的步骤如下:
找到有瑕疵的坐标(即像素坐标)
获得坐标后,接下来找到梯度较低的相邻坐标。 这一步背后的想法是找到一个光滑的补丁,并适用于有瑕疵的地方,否则称为补丁
然后应用无缝克隆以应用修补程序
现在,下面的代码使用OpenCV中的Scharr操作符来计算渐变。接下来,它对x方向和y方向上的绝对梯度求和。这些总梯度是针对特定面片计算的
def calcVariance(patch):
x = cv2.Scharr(patch, -1, 1, 0)
y = cv2.Scharr(patch, -1, 0, 1)
return np.abs(x) + np.abs(y)
从下面的代码中,查看variance = 1/calcVariance(patch).sum()
行。我们将方差设置为梯度的倒数。我对这一行有点困惑。我们为什么要这样做?再说一遍,为什么要再次计算总和calcVariance(patch).sum()
def pickBestAround(xy, values, image):
bestV = 0
best_xy = None
for move in np.array([(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]) * 30:
xy_m = xy + move
if xy_m[xy_m<0].sum() < 0:
continue
patch = getPatch(xy_m, values)
variance = 1/calcVariance(patch).sum()
if variance > bestV:
bestV = variance
best_xy = xy_m
return getPatch(best_xy, values), getPatch(best_xy, image)
我从代码推断,方差与计算的梯度成反比。这是真的吗
目前没有回答
相关问题 更多 >
编程相关推荐