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) # 生成一组随机点 np.random.seed(0) points = np.random.rand(87, 2) * image.shape[:2] # 将椭圆拟合到点集 # 计算轴 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) # 生成带有兴趣点的二进制图像 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 # 将椭圆拟合到兴趣点 major_axis, minor_axis = mh.features.ellipse_axes(binary_image) print(major_axis, minor_axis)
输出
执行上述代码时,我们得到以下输出 −
722.1261184969184 479.52790970346524