Mahotas - 高斯滤波



高斯滤波是一种用于模糊或平滑图像的技术。它可以减少图像噪声并软化锐利边缘。

想象一下你的图像是一个由许多小点组成的网格,每个点代表一个像素。高斯滤波通过获取每个像素并根据周围像素调整其值来工作。

它计算其邻域中像素值的加权平均值,对较近的像素给予更多重视,对较远的像素给予较少重视。

通过对图像中每个像素重复此过程,高斯滤波器通过平滑不同区域之间的急剧过渡和减少噪声来模糊图像。

滤波器的大小决定了模糊的程度。较大的滤波器尺寸意味着考虑的区域更广,从而导致更明显的模糊。

简单来说,高斯滤波通过平均附近的像素值使图像看起来更平滑,对较近的像素给予更多重视,对较远的像素给予较少重视。这有助于减少噪声并使图像不那么锐利。

Mahotas中的高斯滤波

在Mahotas中,我们可以使用mahotas.gaussian_filter()函数对图像执行高斯滤波。此函数通过使用称为高斯核的特殊矩阵来对图像应用模糊效果。

高斯核是一个特殊的矩阵,其数字以特定方式排列。核中的每个数字代表一个权重。

将核放置在图像中的每个像素上,并且相邻像素的值与其在核中的相应权重相乘。

然后将相乘的值相加,并将其赋值为中心像素的新值。对图像中的每个像素重复此过程,从而产生模糊的图像,其中减少了锐利细节和噪声。

mahotas.gaussian_filter()函数

mahotas.gaussian_filter()函数以灰度图像作为输入,并返回图像的模糊版本作为输出。

模糊的程度由sigma值决定。sigma值越高,应用于输出图像的模糊程度就越大。

语法

以下是mahotas中gaussian_filter()函数的基本语法:

mahotas.gaussian_filter(array, sigma, order=0, mode='reflect', cval=0.,
out={np.empty_like(array)})

其中:

  • array - 输入图像。

  • sigma - 决定高斯核的标准差。

  • order (可选) - 指定高斯滤波器的阶数。其值可以是0、1、2或3(默认为0)。

  • mode (可选) - 指定如何处理边界(默认为'reflect')。

  • cval (可选) - 当mode为'constant'时应用的填充值(默认为0)。

  • out (可选) - 指定存储输出图像的位置(默认为与array相同大小的数组)。

示例

在下面的示例中,我们使用mh.gaussian_filter()函数对图像应用高斯滤波。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('tree.tiff')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Applying gaussian filtering
gauss_filter = mh.gaussian_filter(image, 4)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the gaussian filtered image
axes[1].imshow(gauss_filter)
axes[1].set_title('Gaussian Filtered Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()
输出

以下是上述代码的输出:

Gaussian Filtering

不同阶数的滤波

我们可以对图像进行不同阶数的高斯滤波。高斯滤波中的阶数决定了应用于图像的平滑度(模糊度)。

阶数越高,应用于图像的平滑效果就越大。

处理非常嘈杂的图像时,较高的阶数很有用。但是,较高的阶数也会增加处理时间,因为滤波器会多次应用。

0阶应用高斯滤波器一次,1、2或3阶分别应用高斯滤波器两次、三次和四次。

在mahotas中,要进行不同阶数的高斯滤波,我们将0以外的任何值作为order参数传递给gaussian_filter()函数。

示例

在下面提到的示例中,我们对图像应用不同阶数的高斯滤波。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('sea.bmp')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Applying gaussian filtering
gauss_filter = mh.gaussian_filter(image, 3, 1)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the gaussian filtered image
axes[1].imshow(gauss_filter)
axes[1].set_title('Gaussian Filtered Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

上述代码的输出如下:

Filtering Different Order

'Mirror'模式下的滤波

将滤波器应用于图像时,确定如何处理图像的边界非常重要。“镜像”模式是一种常见的方法,它通过镜像边界处的图像内容来处理边界像素。

这意味着图像边界之外的值是通过镜像图像内最近的像素获得的。这是通过沿边缘镜像现有像素来完成的。

这种镜像技术确保了实际图像和镜像图像之间平滑的过渡,从而产生更好的连续性。

示例

在这里,我们使用“镜像”模式对图像应用高斯滤波。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('sun.png')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Applying gaussian filtering
gauss_filter = mh.gaussian_filter(image, 3, 0, mode='mirror')
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the gaussian filtered image
axes[1].imshow(gauss_filter)
axes[1].set_title('Gaussian Filtered Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

执行上述代码后,我们将获得以下输出:

Filtering Different Order1
广告