他们让我在Python中使用可分离的滤镜实现2D高斯平滑。我不知道该怎么做......事实上我不知道1D和2D高斯平滑的区别。我在哪里可以找到更多相关信息?
非常感谢
答案 0 :(得分:3)
关于2D过滤:
高斯平滑算子是一个二维卷积算子,用于“模糊”图像并去除细节和噪声。
使用图像时 - 卷积是一种计算给定像素的新值的操作,它考虑了周围相邻像素的值。 主要元素是卷积核。
Сonvolution内核 - 一个矩阵(任意大小,最常用的是方阵(默认为3x3)
[] [] []
[] [k] []
[] [] []
Convolution非常简单: 当计算所选像素的新值时,通过其中心像素将卷积核应用于其。相邻的像素由相同的内核覆盖。 接下来,计算图像中像素的乘积与卷积内核的值之和,其覆盖给定像素。 结果总和是所选像素的新值。 现在,如果我们将卷积应用于图像中的每个像素,您将获得一定的效果,这取决于所选的卷积内核。
例如,我们有以下图片:
[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] [] [] [] [] [] [] [] [] [] []
[] [] [] [] [] [] [] [] [] [] [] []
[] [] [] [] [] [] [] [] [] [] [] []
Here是高斯平滑的一个很好的解释。关于1D和2D高斯平滑:
“卷积实际上可以相当快地执行,因为上面显示的2-D各向同性高斯的方程可以分为x和y分量。因此,2-D卷积可以通过首先与1-D卷积来执行高斯在x方向上,然后在y方向与另一个1-D高斯卷积。“
您可以尝试在此site中使用卷积滤镜。
希望这会对你有所帮助。
答案 1 :(得分:1)
您可以查看Python Imaging Library。
基本理念是这样的。你有一个图像,你有一个叫做内核的东西。然后使用内核/过滤器处理图像。这将创建一个新图像,该图像是通过在源图像中的每个像素上应用内核并将结果添加到目标图像而创建的。
从Image Filter进行一些更改,以便更清楚地了解如何创建自定义内核以及使用它来处理图像。我没试过这个,所以它应该被视为伪代码:
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高斯数据。