Mahotas - 图像椭圆轴



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

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

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

Mahotas中的图像椭圆轴

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

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

使用ellipse.axes()函数

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

将椭圆拟合到一组点

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

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

  • 我们将随机生成的数值乘以图像的形状。
  • 图像的形状表示图像的维度,作为一个元组(高度,宽度)。
  • 通过将随机生成的数值乘以图像的形状,我们有效地缩放点以匹配图像的维度。

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

示例

在这里,我们尝试将椭圆拟合到一组给定的点:

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

使用ROI将椭圆拟合到灰度图像

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

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

  • 初始化一个与原始图像形状相同的零数组。
  • 然后,将数组中兴趣点的索引设置为255,有效地将这些位置标记为兴趣点。
  • 这个二值图像使我们能够在拟合椭圆时隔离并关注我们想要分析的特定点,使我们能够根据选择的点准确地估计椭圆的参数。

示例

在这里,我们使用感兴趣区域将椭圆拟合到灰度图像:

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
广告