Mahotas 简明教程

Mahotas - Image Ellipse Axes

椭圆是一种几何形状,定义为平面中围绕两个焦点的一个曲线,使得对于曲线上的每个点,到两个焦点的距离之和都是常数。

椭圆的长轴是指最长的直径,它穿过椭圆上最远的两个点。另一方面,短轴是短轴,垂直于长轴,并与长轴相交于椭圆的中心。

这些轴提供了有关对象或区域的大小、方向和纵横比的信息。

Image Ellipse Axes in Mahotas

在 Mahotas 中处理椭圆时,轴被指定为两个值的元组 − 半主轴和半短轴的长度。

Mahotas 提供 mahotas.ellipse_axes() 函数,可以轻松检测图像中的椭圆并获得其长轴和短轴长度。

Using the ellipse.axes() Function

Mahotas 中的 ellipse_axes() 函数用于检测图像中的椭圆。此函数接受二进制图像作为输入,并返回长轴和短轴的长度。

以下是使用 Mahotas 在图像中查找椭圆轴的基本语法 −

mahotas.features.ellipse_axes(bwimage)

其中, 'bwimage' 是图像的单通道数组,解释为布尔值。

在以下示例中,我们将学习如何在 mahotas 中查找图像椭圆轴 −

import mahotas as mh
import numpy as np
image=mh.imread('nature.jpeg', as_grey = True)
smajor,sminor = mh.features.ellipse_axes(image)
print(smajor,sminor)

以下是上面代码的输出: -

739.0056545212358 336.5943563176811

Fitting an Ellipse to a Set of Points

我们还可以通过在图像内生成随机点将椭圆拟合到特定感兴趣点。随机点使用 NumPy 库中的 np.random.rand() 函数在 0 到 1 之间的均匀分布中生成。每个随机数表示特定轴上的坐标值。

为了确保生成的点落在图像边界内——

  1. 我们使用图像的形状乘以随机生成的数值。

  2. 图像的形状表示图像的维度,为元组 (高度、宽度)。

  3. 通过使用图像形状乘以随机生成的值,我们有效地缩放点以匹配图像的维度。

生成的点表示为 (x, y) 坐标,其中 x 表示列索引,y 表示图像的行索引。

Example

在此,我们试图将椭圆拟合到一组给定点中——

import numpy as np
import mahotas as mh
image = mh.imread('tree.tiff', as_grey=True)
# Generating a set of random points
np.random.seed(0)
points = np.random.rand(87, 2) * image.shape[:2]
# Fitting an ellipse to the set of points
# calculating the axes
major_axis, minor_axis = mh.features.ellipse_axes(points)
print(major_axis, minor_axis)

上述代码的输出如下:

50.226155204899634 1.0

Fitting an Ellipse to a Grayscale Image Using ROI

我们可以通过生成随机感兴趣点使用感兴趣区域 (ROI) 将椭圆拟合到灰度图像中。然后,我们需要创建一个二值图像,其中点设置为白色(像素值 255)而背景设置为黑色(像素值 0)。

我们可通过以下方式实现:

  1. 使用与原始图像相同的形状初始化一个由零组成的数组。

  2. 然后,将数组中感兴趣点的索引设置为 255,将这些位置有效地标记为感兴趣点。

  3. 该二值图像允许我们在拟合椭圆时隔离并关注要分析的特定点,这使我们能够根据所选点准确估计椭圆的参数。

Example

在此,我们使用感兴趣区域将椭圆拟合到灰度图像中——

import numpy as np
import mahotas as mh
image = mh.imread('sun.png', as_grey=True)
# Generating a binary image with points of interest
np.random.seed(0)
points = np.random.rand(100, 2) * image.shape[:2]
points = points.astype(int)
binary_image = np.zeros(image.shape, dtype=np.uint8)
binary_image[points[:, 0], points[:, 1]] = 255
# Fitting an ellipse to the points of interest
major_axis, minor_axis = mh.features.ellipse_axes(binary_image)
print(major_axis, minor_axis)

在执行上述代码时,我们得到以下输出——

722.1261184969184 479.52790970346524