Mahotas - 图像处理



Mahotas是一个流行的Python包,用于处理图像并在其上执行各种操作。它可以对图像执行许多操作,例如将图像分割成不同的部分、查找边缘以及识别图像中的对象。

使用Mahotas,我们可以找到一组图片中所有的人脸,或在一组图像中识别不同类型的花卉。我们还可以找到图片中物体的边缘,或者使用Mahotas使模糊的图片更清晰。

在本教程中,我们将简要概述如何使用Mahotas处理图像,包括如何读取、写入和显示图像。我们还将学习如何执行常见的图像处理任务,例如滤波、分割和特征提取。

使用Mahotas进行图像处理

Mahotas的关键特性之一是它能够处理各种格式的图像,例如JPEG、PNG和BMP。Mahotas为我们提供了读取和写入图像以及在不同格式之间转换图像的功能。

让我们学习如何在Mahotas中读取图像。

读取图像

在Mahotas中读取图像指的是从文件中加载图像数据的过程。要在Mahotas中读取图像,我们可以使用imread()函数。此函数从文件读取图像并返回一个表示图像的NumPy数组。

示例

在下面的代码中,我们尝试读取一个名为“nature.jpeg”的JPEG图像 -

import mahotas as ms
image = ms.imread('nature.jpeg')
print ("The image is read.")

输出

这将从“nature.jpeg”文件读取图像并将其存储在变量“image”中 -

The image is read.

我们还可以像下面讨论的那样,在读取图像后显示它。

显示图像

读取图像后,我们可以使用matplotlib库来显示它。matplotlib库用于数据可视化和绘图。

示例

让我们使用matplotlib库显示“nature.jpeg”图像,如下所示 -

import matplotlib.pyplot as plt
import mahotas as ms
image = ms.imread('nature.jpeg')
plt.imshow(image)
plt.show()

输出

以下是执行上述代码后获得的图像 -

Displaying an Image

写入图像

在Mahotas中写入图像指的是将图像数据保存到特定图像格式(例如PNG、JPEG、BMP、TIFF等)的文件中。我们可以使用imsave()函数在Mahotas中写入图像。此函数是Mahotas中图像输入/输出(IO)模块的一部分。

示例

在下面的代码中,我们尝试保存一个名为“nature.jpeg”的图像 -

import mahotas as ms
image = ms.imread('nature.jpeg')
print ("The image is read.")
# Write the image to a file
ms.imsave('writing.jpeg', image)
print ("The image data is saved.")

输出

这将图像保存到“writing.jpeg”文件中 -

The image is read.
The image data is saved.

使用Mahotas进行图像处理

图像处理指的是一组用于对图像执行多个操作的技术。这些技术有助于提高图像的视觉质量、提取有用的信息或准备图像以进行分析。

一些常见的图像处理任务包括滤波、分割和特征提取。在本节中,我们将探讨Mahotas提供的一些关键图像处理函数。

滤波

在Mahotas中,滤波指的是修改图像的外观或从中提取有用的信息。这是通过对图像应用数学运算来完成的。滤波过程有助于去除噪声、平滑图像、增强边缘或执行其他有助于提高图像质量或可解释性的操作。

示例

在下面的示例中,我们尝试使用高斯滤波器平滑图像。高斯滤波器会模糊图像,这可以用来减少噪声或平滑图像 -

import mahotas as ms
import numpy as np
import matplotlib.pyplot as mtplt
# Loading an image and converting it to grayscale
image = ms.imread('nature.jpeg', as_grey=True)
# Applying a Gaussian filter
# Standard deviation
sigma = 15
gaussian_filtered = ms.gaussian_filter(image, sigma)
# Displaying the original image
fig, axes = mtplt.subplots(1, 2, figsize=(9, 4))
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].axis('off')
# Displaying the filtered image
axes[1].imshow(gaussian_filtered, cmap='gray')
axes[1].set_title('Gaussian Filtered')
axes[1].axis('off')
mtplt.show()
输出

这将使用标准差为15的高斯滤波器平滑原始图像,如下所示 -

Image Filtering

分割

在Mahotas中,分割指的是根据某些特征或标准将图像划分为有意义的区域或分割的过程。这些分割可以表示不同的对象、感兴趣区域或图像内的不同区域。

示例

现在,让我们通过使用Mahotas进行阈值化的基本图像分割示例。阈值化用于根据像素强度值将对象与背景分离。它通过将图像转换为二值图像来简化图像,其中每个像素都被分类为前景(对象)或背景 -

import mahotas as ms
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = ms.imread('nature.jpeg', as_grey=False)
# Performing thresholding
# Calculating threshold value by taking mean of image
threshold = np.mean(image)
# creating binary image
# comparing each pixel value with the threshold
binary_image = image > threshold
# Perform connected component analysis
# assigns a unique label to each connected region in the binary image
labeled_image, num_objects = ms.label(binary_image)
# Displaying the original image
fig, ax = mtplt.subplots(1, 2, figsize=(9, 4))
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original Image')
# Displaying the segmented image
ax[1].imshow(labeled_image, cmap='rainbow')
ax[1].set_title('Segmented Image ({} objects)'.format(num_objects))
mtplt.show()
输出

上述代码的输出如下所示 -

Original Segmentation Image

特征提取

在Mahotas中,特征提取指的是从图像中提取有意义和信息丰富的特征的过程。这些特征可以表示图像的各个方面,例如纹理、形状或颜色,并且可以用来描述和区分图像中的对象或区域。

示例

现在,让我们看看如何使用Mahotas计算Zernike矩的示例。Zernike矩是一组描述对象或图像内区域形状的数值。它们通过捕获对象的轮廓和空间特征来提供对象形状的紧凑表示 -

import mahotas as ms
from mahotas.features import zernike_moments
# Loading the image
image = ms.imread('nature.jpeg', as_grey=True)
# Normalizing the image
normalized_image = ms.stretch(image)
# Specifying the radius for Zernike moments calculation
radius = 30
# Calculating Zernike moments
moments = zernike_moments(normalized_image, radius)
# Printing the resulting moments
print(moments)
输出

执行上述代码后,我们得到一组描述图像形状特征的数值,如下所示 -

[0.31830989 0.01252728 0.00854837 0.00677556 0.00239216 0.00742469
0.00553204 0.00306795 0.01058855 0.00368774 0.00456233 0.01123103
0.00336877 0.00349998 0.00387494 0.0108442 0.00294575 0.00490895
0.00243368 0.01113736 0.00229705 0.00511743 0.00668574 0.0083512
0.00767699]
广告