当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python skimage.measure.find_contours用法及代码示例


用法:

skimage.measure.find_contours(image, level=None, fully_connected='low', positive_orientation='low', *, mask=None)

在二维数组中查找给定级别值的 iso-valued 轮廓。

使用“marching squares” 方法计算特定级别值的输入二维数组的iso-valued 轮廓。数组值是线性插值的,以便为输出轮廓提供更好的精度。

参数

image二维数组

输入要在其中查找轮廓的图像。

level浮点数,可选

在数组中查找轮廓的值。默认情况下,级别设置为 (max(image) + min(image)) /2

fully_connected字符串,{‘low’, ‘high’}

指示是否考虑低于给定级别值的数组元素fully-connected(因此高于该值的元素将仅面连接),反之亦然。 (有关详细信息,请参阅下面的注释。)

positive_orientation字符串,{‘low’, ‘high’}

指示输出等高线是否会在低或 high-valued 元素岛周围生成 positively-oriented 多边形。如果‘low’ 则轮廓将逆时针围绕iso-value 下方的元素缠绕。或者,这意味着 low-valued 元素始终位于轮廓的左侧。 (详情见下文。)

maskbool 的 2D ndarray,或无

一个布尔掩码,True,我们要在其中绘制轮廓。请注意,始终将 NaN 值排除在考虑的区域之外(在 arrayNaN 的地方, mask 设置为 False )。

返回

contours(n,2)-ndarrays 列表

每个轮廓都是一个形状为 (n, 2) 的 ndarray,由沿轮廓的 n 个 (row, column) 坐标组成。

其他参数

arrayDEPRECATED

已弃用以支持图像。

注意

行进方块算法是行进立方体算法 [1] 的一个特例。这里有一个简单的解释:

http://users.polytech.unice.fr/~lingrand/MarchingCubes/algo.html

行进方块算法中有一个不明确的情况:当给定的2 x 2-元素方块有两个high-valued和两个low-valued元素时,每对对角相邻。 (其中 high- 和 low-valued 是相对于所寻求的轮廓值。)在这种情况下,可以通过分隔 low-valued 元素的薄地峡将 high-valued 元素“连接在一起”,反之亦然.当元素通过对角线连接在一起时,它们被认为是“完全连接的”(也称为“face+vertex-connected”或“8-connected”)。只有high-valued或low-valued元素可以是fully-connected,其他集合将被视为“face-connected”或“4-connected”。默认情况下,low-valued元素被认为是fully-connected;这可以使用‘fully_connected’ 参数进行更改。

输出轮廓不保证是关闭的:与数组边或masked-off 区域(掩码为 False 或数组为 NaN)相交的轮廓将保持打开状态。所有其他轮廓将被关闭。 (可以通过检查起点是否与终点相同来测试轮廓的closed-ness。)

轮廓是定向的。默认情况下,低于轮廓值的数组值位于轮廓的左侧,大于轮廓值的值位于右侧。这意味着轮廓将在 low-valued 像素的岛屿周围逆时针(即“正向”)缠绕。可以使用 ‘positive_orientation’ 参数更改此行为。

输出列表中轮廓的顺序由轮廓中最小x,y(按字典顺序)坐标的位置确定。这是遍历输入数组的方式的副作用,但可以依赖。

警告

假定数组坐标/值是指中央的数组元素。举一个简单的示例输入:[0, 1].该数组中 0.5 的插值位置在 0 元素之间(在x=0) 和 1 元素 (在x=1),因此会落在x=0.5.

这意味着要找到合理的等高线,最好在预期的“light” and “dark” 值之间找到等高线。特别是,给定一个二值化数组,不要选择在数组的低值或高值处查找轮廓。这通常会产生退化的轮廓,尤其是在单个数组元素宽的结构周围。而是选择一个中间值,如上所述。

参考

1

Lorensen, William and Harvey E. Cline. Marching Cubes: A High Resolution 3D Surface Construction Algorithm. Computer Graphics (SIGGRAPH 87 Proceedings) 21(4) July 1987, p. 163-170). DOI:10.1145/37401.37422

例子

>>> a = np.zeros((3, 3))
>>> a[0, 0] = 1
>>> a
array([[1., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
>>> find_contours(a, 0.5)
[array([[0. , 0.5],
       [0.5, 0. ]])]

相关用法


注:本文由纯净天空筛选整理自scikit-image.org大神的英文原创作品 skimage.measure.find_contours。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。