python - 图像处理中的方差和梯度之间有什么关系吗?
问题描述
我正在用 Python 去除瑕疵。有关如何实现去除瑕疵的参考,我浏览了以下代码:去除瑕疵。去除瑕疵所需的步骤是:
找到有瑕疵的坐标(即像素的坐标)
获得坐标后,接下来找到梯度较低的相邻坐标。这一步背后的想法是找到一个光滑的补丁,并将其应用于有瑕疵的区域,否则称为补丁。
然后应用无缝克隆来应用补丁。
现在,下面的代码使用 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)
我从代码中推断出方差与计算的梯度成反比。真的吗?
解决方案
推荐阅读
- r - 如何在R中找到数据集中缺失值的位置?
- javascript - 警告 findDomNode
- python - Python groupby 单行 if else 语句
- javascript - 如何在不先解构的情况下等待数组中返回的承诺?
- c# - 如何处理 .net MVC Core 中的动态错误页面?
- phpunit - 需要用于登录、注销重定向的 phpunit 测试用例(不在 laravel 中)
- python - 如何将集合列表的列表序列化为 json 以插入 DB 列
- entity-framework - 在 EFCore 中包含忽略的列
- javascript - Pyodide - 如何打印结果
- c# - 无法使用 nettopologysuite 调用 varbinary 上的方法