1

他们要求我使用 Python 中的可分离滤波器实现 2D 高斯平滑。我不知道该怎么做......事实上我不知道一维和二维高斯平滑的区别。我在哪里可以找到有关它的更多信息?

非常感谢

4

2 回答 2

3

关于二维过滤:

高斯平滑算子是一种二维卷积算子,用于“模糊”图像并去除细节和噪声。

处理图像时 - 卷积是一种计算给定像素的新值的操作,其中考虑了周围相邻像素的值。主要元素是卷积核。

Сonvolution kernel - 一个矩阵(任意大小,最常用的方阵(默认为 3x3)

[ ][ ][ ]
[ ][k][ ]
[ ][ ][ ]

卷积的工作非常简单:当计算所选像素的新值时,卷积核通过其中心像素应用于它。相邻像素被相同的内核覆盖。接下来,计算图像中的像素与卷积核的值的乘积之和,该卷积核覆盖了给定的像素。结果总和是所选像素的新值。现在,如果我们将卷积应用于图像中的每个像素,你会得到一定的效果,这取决于所选择的卷积核。

例如,我们有以下图像:

[47][48][49][][][][][][][][][]
[47][50][42][][][][][][][][] [][]
[47][48][42][][][][][][][][][][][][]
[][][][][][][][ ][ ][ ]

你有卷积核:

[0][1][0]
[0][0][0]
[0][0][0]

结果按以下方式计算:

结果 = 47*0 + 48*1 + 49*0 + 47*0 + 50*0 + 42*0 + 47*0 + 48*0 + 42*0 = 48

将我们的内核应用于值为 50 的像素的结果:

[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
[ ][48][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ] [ ][ ][ ][
][ ][ ][ ][ ][ ][ ][ ][ ]

是对高斯平滑的一个很好的解释。关于一维和二维高斯平滑:

“实际上,卷积可以相当快地执行,因为上面显示的二维各向同性高斯方程可分离为 x 和 y 分量。因此,二维卷积可以通过首先与一维高斯卷积来执行x 方向,然后在 y 方向与另一个一维高斯卷积。”

您可以尝试在此站点中应用卷积过滤器。

希望这对您有所帮助。

于 2013-02-18T10:37:45.817 回答
1

您可以查看Python Imaging Library

基本思路是这样的。你有一个图像,你有一个叫做内核的东西。然后,您使用内核/过滤器处理图像。这将创建一个新图像,该图像是通过对源图像中的每个像素应用内核并将结果添加到目标图像而创建的。

图像过滤器中进行了一些更改,以更清楚地说明如何创建自定义内核并使用它处理图像。我没有尝试过,所以它应该被视为伪代码:

import ImageFilter

customKernelData = ( 0.0, 0.0, 0.0,
                     0.0, 1.0, 0.0,
                     0.0, 0.0, 0.0 )    

customKernel = ImageFilter.Kernel( (3,3), customKernelData )
im = im.filter( customKernel )

在您的情况下,您必须使用数据实际上是 2D 高斯数据的内核。

于 2013-02-16T22:03:43.337 回答