我正在尝试使用Python 2.7编写自己的(或至少可以更好地理解)高斯模糊滤镜。我真的很感激一些方向。我看过的其他任何地方都只使用内置插件......
答案 0 :(得分:0)
您需要遍历图像中的每个像素。在每个像素处从其周围环境中取出加权样本并将它们全部加到像素的新值上。所以代码看起来像这样:
for x in range(input.size[0]):
for y in range(input.size[1]):
result[x, y] = 0
result[x, y] += 0.01 * input[x-1, y+1] + 0.08 * input[x, y+1] + 0.01 * input[x+1, y+1]
result[x, y] += 0.08 * input[x-1, y ] + 0.64 * input[x, y ] + 0.08 * input[x+1, y ]
result[x, y] += 0.01 * input[x-1, y-1] + 0.08 * input[x, y-1] + 0.01 * input[x+1, y-1]
但在我的代码中,我没有照顾图像的边缘。这将导致对图像进行索引和过度索引。如何处理边缘至少有三种不同的简单方法:
使用选项2和3,边缘不像图像中心那样模糊。如果您的样本窗口大小为3x3,则这是一个小问题,但是如果样本窗口大小更大,则可以看到它。
如果要获得良好的性能,可以尝试使用OpenCL或OpenGL启动替换for循环,并将内部循环写入OpenCL内核或GLSL着色器。这些将导致尽可能多的像素并行计算。通过先在水平轴上然后在垂直轴上模糊,可以进一步优化这些,这样可以减少样品数量,并且在样品窗口较大时应该更快。
关于同样的事情用this post中的其他词来解释。