measure

模块:测量

skimage.measure.approximate_polygon(coords,...)近似具有指定公差的多边形链。
skimage.measure.block_reduce(image,block_size)通过对局部块应用函数来下采样图像。
skimage.measure.compare_mse(im1,im2)计算两幅图像之间的均方差。
skimage.measure.compare_nrmse(im_true,im_test)计算两幅图像之间的归一化均方根误差(NRMSE)。
skimage.measure.compare_psnr(im_true,im_test)计算图像的峰值信噪比(PSNR)。
skimage.measure.compare_ssim(X,Y,...)计算两幅图像之间的平均结构相似性指数。
skimage.measure.correct_mesh_orientation(...)网格面的正确方向。
skimage.measure.find_contours(数组,级别)对于给定的水平值,在二维数组中找到等值的轮廓。
skimage.measure.grid_points_in_poly(shape,verts)测试指定网格上的点是否在多边形内。
skimage.measure.label(输入,邻居,...)标记整数数组的连接区域。
skimage.measure.marching_cubes(volume,...)Lewiner推进立方体算法来查找3D体积数据中的曲面。
skimage.measure.marching_cubes_classic(体积)经典的游动立方体算法,用于查找3D体积数据中的曲面。
skimage.measure.marching_cubes_lewiner(体积)marching_cubes()的别名。
skimage.measure.mesh_surface_area(verts,faces)计算表面积,给定顶点和三角形面
skimage.measure.moments(图片,订单)计算所有原始图像时刻达到一定的顺序。
skimage.measure.moments_central(image,cr,cc)计算所有的中心图像时刻达到一定的顺序。
skimage.measure.moments_hu(NU)计算胡的一组图像时刻。
skimage.measure.moments_normalized(mu,order)计算所有归一化的中心图像时刻,达到一定的顺序。
skimage.measure.perimeter(图片,邻居)计算二进制图像中所有对象的总周长。
skimage.measure.points_in_poly(点,垂直)测试点是否位于多边形内。
skimage.measure.profile_line(img,src,dst)返回沿扫描线测量的图像的强度分布。
skimage.measure.ransac(data,model_class,...)使用RANSAC(随机样本一致性)算法将模型拟合到数据。
skimage.measure.regionprops(label_image,...)测量标记的图像区域的属性。
skimage.measure.shannon_entropy(image,base)计算图像的香农熵。
skimage.measure.structural_similarity(X,Y)弃用功能。改用compare_ssim。
skimage.measure.subdivide_polygon(coords,...)使用B样条对多边形曲线进行细分。
skimage.measure.CircleModel()2D圆圈的总体最小二乘估计量。
skimage.measure.EllipseModel()2D椭圆的总体最小二乘估计量。
skimage.measure.LineModel()2D线的总最小二乘估计量。
skimage.measure.LineModelND()N维线的总体最小二乘估计量。
skimage.measure.block
skimage.measure.entropy
skimage.measure.fit
skimage.measure.pnpoly
skimage.measure.profile
skimage.measure.simple_metrics

approximate_polygon

skimage.measure.approximate_polygon(coords, tolerance)[资源]

近似具有指定公差的多边形链。

它基于Douglas-Peucker算法。

请注意,近似的多边形总是在原始多边形的凸包内。

参数:坐标:(N,2)阵列坐标数组。tolerance:float从多边形原始点到近似多边形链的最大距离。如果公差为0,则返回原始坐标数组。
返回:坐标:(M,2)阵列近似多边形链,其中M <= N.

参考

R329http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm

block_reduce

skimage.measure.block_reduce(image, block_size, func=<function sum>, cval=0)[资源]

通过对局部块应用函数来下采样图像。

参数:image:ndarray N维输入图像。block_size:array_like包含沿每个轴下采样整数因子的数组。func:可调用函数对象,用于计算每个本地块的返回值。该函数必须实现一个轴参数,如numpy.sum或numpy.min。cval:float如果图像不能完全被块大小整除,则为常量填充值。
返回:image:与输入图像具有相同维数的下采样图像。

例子

>>> from skimage.measure import block_reduce >>> image = np.arange(3*3*4).reshape(3, 3, 4) >>> image array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]], [[24, 25, 26, 27], [28, 29, 30, 31], [32, 33, 34, 35]]]) >>> block_reduce(image, block_size=(3, 3, 1), func=np.mean) array([[[ 16., 17., 18., 19.]]]) >>> image_max1 = block_reduce(image, block_size=(1, 3, 4), func=np.max) >>> image_max1 array([[[11]], [[23]], [[35]]]) >>> image_max2 = block_reduce(image, block_size=(3, 1, 4), func=np.max) >>> image_max2 array([[[27], [31], [35]]])

compare_mse

skimage.measure.compare_mse(im1, im2)[资源]

计算两幅图像之间的均方差。

参数:im1,im2:ndarray图片。任何维度。
返回:mse:float均方误差(MSE)度量。

compare_nrmse

skimage.measure.compare_nrmse(im_true, im_test, norm_type='Euclidean')[资源]

计算两幅图像之间的归一化均方根误差(NRMSE)。

参数:im_true:ndarray地面真相图像。im_test:ndarray测试图像。norm_type:{'Euclidean','min-max','mean'}控制用于NRMSE分母的标准化方法。文献R330没有标准化的标准化方法。这里提供的方法如下:'欧几里德':用im_true的欧几里德规范进行归一化。'min-max':通过im_true的强度范围进行归一化。'mean':通过im_true的均值来标准化。
返回:nrmse:float NRMSE度量标准。

  • '欧几里得':按欧几里得规范归一化im_true

  • 'min-max':按照强度范围进行归一化im_true

  • 'mean':用.im_true的均值标准化

Returns: **nrmse** : float

NRMSE度量。

参考

R330(1, 2) https://en.wikipedia.org/wiki/Root-mean-square_deviation

compare_psnr

skimage.measure.compare_psnr(im_true, im_test, data_range=None, dynamic_range=None)[资源]

计算图像的峰值信噪比(PSNR)。

参数:im_true:ndarray地面真相图像。im_test:ndarray测试图像。data_range:int输入图像的数据范围(最小和最大可能值之间的距离)。默认情况下,这是从图像数据类型估计的。
返回:psnr:float PSNR指标。

参考

R331https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio

compare_ssim

skimage.measure.compare_ssim(X, Y, win_size=None, gradient=False, data_range=None, multichannel=False, gaussian_weights=False, full=False, dynamic_range=None, **kwargs)[资源]

计算两幅图像之间的平均结构相似性指数。

参数:X,Y:ndarray图片。任何维度。win_size:int或None用于比较的滑动窗口的边长。必须是奇数值。如果gaussian_weights为True,则忽略它,窗口大小将取决于西格玛。渐变:布尔,可选如果为True,也会返回渐变。data_range:int,可选输入图像的数据范围(最小和最大可能值之间的距离)。默认情况下,这是从图像数据类型估计的。多通道:bool,可选如果为True,则将数组的最后一个维度视为通道。相似性计算是针对每个通道独立完成的,然后进行平均。gaussian_weights:bool,可选如果为True,则每个补丁均具有由宽度为sigma = 1.5的归一化高斯内核进行空间加权的均值和方差。full:bool,可选如果为True,
返回:mssim:float图像上的平均结构相似度。grad:ndarray X和Y R333之间的结构相似性指数的梯度。这仅在梯度设置为True时才会返回。S:ndarray完整的SSIM图像。这仅在full设置为True时才会返回。

| 其他参数:|

| | use_sample_covariance:bool如果为真,用N-1归一化协方差而不是N,其中N是滑动窗口内的像素数。K1:浮点算法参数,K1(小常量,参见R332)K2:浮点算法参数,K2(小常量,参见R332)sigma:当gaussian_weights为真时为高斯浮点数。|

注意

为了配合Wang等的实施。[R332],将gaussian_weights设置为True,将sigma设置为1.5,并将use_sample_covariance设置为False。

参考

R332(1,2,3,4)Wang,Z.,Bovik,AC,Sheikh,HR和Simoncelli,EP(2004)。图像质量评估:从错误可见性到结构相似性。IEEE Transactions on Image Processing,13,600-612。https://ece.uwaterloo.ca/~z70wang/publications/ssim.pdf,DOI:10.1.1.11.2477

R333(1,2)Avanaki,AN(2009)。准确的全局直方图规范针对结构相似性进行了优化 Optical Review,16,613-621。http://arxiv.org/abs/0901.0065,DOI:10.1007 / s10043-009-0119-z

correct_mesh_orientation

skimage.measure.correct_mesh_orientation(volume, verts, faces, spacing=(1.0, 1.0, 1.0), gradient_direction='descent')[资源]

网格面的正确方向。

参数:体积:(M,N,P)双精度数组输入数据体积以查找等值面。将转换为np.float64。verts:(V,3)浮点数组包含V唯一网格顶点的(x,y,z)坐标的数组。faces:(F,3)ints的数组列表的长度为3的整数列表,引用在vert中提供的顶点坐标。间距:长度为3的浮点数元素体积空间中的体素间距对应于体积中的numpy阵列索引尺寸(M,N,P)。gradient_direction:string控制网格是从等值面生成的,梯度下降到感兴趣的对象(默认值),或者相反。这两个选项是:*下降:对象比外部大*上升:外部大于对象
返回:faces_corrected(F,3)ints数组更正verts中引用顶点坐标的面的列表。

扩展内容

skimage.measure.marching_cubes_classic, skimage.measure.mesh_surface_area

注意

某些应用程序和网格处理算法要求所有面都以一致的方式进行定向。通常,这意味着法线向量指出网格形状的“出”。该算法skimage.measure.marching_cubes_classic通过翻转面向错误的面的方向来校正输出。

由于步进立方体可以用于在梯度下降(其中所需物体具有比外部更大的值)或上升(其中期望物体具有比外部更低的值)处找到等值面,gradient_directionkwarg允许用户通知该算法,其中是正确的。如果生成的网格看上去完全不正确,请尝试更改此选项。

这个函数期望的参数是来自的确切输出skimage.measure.marching_cubes_classic。只有faces被修正并返回,因为顶点不会改变; 只有它们被引用的顺序。

该算法假定faces提供的都是三角形。

find_contours

skimage.measure.find_contours(array, level, fully_connected='low', positive_orientation='low')[资源]

对于给定的水平值,在二维数组中找到等值的轮廓。

使用“步进方块”方法计算输入2D阵列的等值轮廓以获得特定的水平值。数组值被线性插值以提供更好的输出轮廓精度。

参数:数组:2D输入数据的二维图像,用于查找轮廓。level:float在其中查找数组中的轮廓的值。fully_connected:str,{'low','high'}指示给定级别值以下的数组元素是否被视为完全连接(并且因此值之上的元素将仅面向连接),反之亦然。(详情请参见下面的注释。)positive_orientation:'low'或'high'表示输出轮廓是否会在低或高值元素的岛周围产生正向多边形。如果'低',那么等高线将围绕低于等值的元素逆时针旋转。或者,这意味着低值元素总是在轮廓的左侧。(详情请参阅下文。)
返回:轮廓:(n,2)列表的列表每个轮廓都是形状(n,2)的状态,由沿着轮廓的n(行,列)坐标组成。

注意

行军平方算法是行军立方体算法[R334]的特例。这里有一个简单的解释:

http://www.essi.fr/~lingrand/MarchingCubes/algo.html

行进平方算法中有一个模棱两可的情况:当给定的2×2元素正方形具有两个高值元素和两个低值元素时,每个元素对角相邻。 (其中高值和低值是相对于所寻求的等值线的值)。在这种情况下,高值元素可以通过分隔低值元素的薄地峡连接在一起,反之亦然。 当元素通过对角线连接在一起时,它们被认为是“完全连接”(也称为“面+顶点连接”或“8连接”)。 只有高价值或低价值的元素可以完全连接,另一套将被视为“面子连接”或“四连接”。 默认情况下,低值元素被视为完全连接; 这可以通过'fully_connected'参数改变。

输出轮廓不保证关闭:与阵列边缘相交的轮廓将保持打开状态。所有其他轮廓将被关闭。(可以通过检查起点与终点相同来测试轮廓的闭合度。)

轮廓面向。默认情况下,低于轮廓值的数组值位于轮廓的左侧,大于轮廓值的值位于右侧。这意味着轮廓将围绕低值像素逆时针旋转(即以“正方向”)。这种行为可以通过'positive_orientation'参数改变。

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

警告

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

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

参考

R334(1,2)洛伦森,威廉和哈维E.克莱因。Marching Cubes:一种高分辨率3D表面构建算法。Computer Graphics(SIGGRAPH 87 Proceedings)21(4)1987年7月,p。163-170)。

例子

>>> 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. ]])]

grid_points_in_poly

skimage.measure.grid_points_in_poly(shape, verts)[资源]

测试指定网格上的点是否在多边形内。

对于网格上的每个(r,c)坐标,即(0,0),(0,1)等,测试该点是否位于多边形内。

参数:形状:元组(M,N)网格的形状。verts:(V,2)数组指定多边形的V个顶点,顺时针或逆时针排序。第一点可能(但不需要)重复。
返回:mask:(M,N)bool True的格网落入多边形内的情况。

扩展内容

points_in_poly

标签

skimage.measure.label(input, neighbors=None, background=None, return_num=False, connectivity=None)[资源]

标记整数数组的连接区域。

两个像素是相邻的,并且具有相同的值。在2D中,它们可以是1或2连接意义上的邻居。该值是指考虑像素/体素邻居的正交跳跃的最大数量:

1-connectivity 2-connectivity diagonal connection close-up [ ] [ ] [ ] [ ] [ ] | \ | / | <- hop 2 [ ]--[x]--[ ] [ ]--[x]--[ ] [x]--[ ] | / | \ hop 1 [ ] [ ] [ ] [ ]

参数:输入:dtype int的ndarray要标记的图像。邻居:{4,8},int,可选是否使用4-或8-“连接”。在3D中,4-“连接”意味着连接的像素必须共享面,而使用8-“连接”时,它们必须仅共享边或顶点。已弃用,请connectivity改用。背景:int,可选将所有具有此值的像素作为背景像素,并将它们标记为0.默认情况下,0值像素被视为背景像素。return_num:bool,可选是否返回已分配标签的数量。connectivity:int,可选最大正交跳数,用于将像素/体素视为邻居。接受的值范围从1到input.ndim。如果没有,则使用input.ndim的完整连接。
返回:标签:dtype int的ndarray标签数组,其中所有连接区域都分配了相同的整数值。num:int,可选数量的标签,它等于最大标签索引,并且只有在return_num为True时才会返回。

扩展内容

regionprops

参考

R335Christophe Fiorio和Jens Gustedt,“用于图像处理的两种线性时间联合发现策略”,理论计算机科学154(1996),第165-181页。

R336Kensheng Wu,Ekow Otoo和Arie Shoshani,“Optimizing connected component labeling algorithms”,论文LBNL-56864,2005,劳伦斯伯克利国家实验室(University of California),http: //repositories.cdlib.org/lbnl/LBNL-56864

例子

>>> import numpy as np >>> x = np.eye(3).astype(int) >>> print(x) [[1 0 0] [0 1 0] [0 0 1]] >>> print(label(x, connectivity=1)) [[1 0 0] [0 2 0] [0 0 3]] >>> print(label(x, connectivity=2)) [[1 0 0] [0 1 0] [0 0 1]] >>> print(label(x, background=-1)) [[1 2 2] [2 1 2] [2 2 1]] >>> x = np.array([[1, 0, 0], ... [1, 1, 5], ... [0, 0, 0]]) >>> print(label(x)) [[1 0 0] [1 1 2] [0 0 0]]

marching_cubes

skimage.measure.marching_cubes(volume, level=None, spacing=(1.0, 1.0, 1.0), gradient_direction='descent', step_size=1, allow_degenerate=True, use_classic=False)[资源]

Lewiner推进立方体算法来查找3D体积数据中的曲面。

相比marching_cubes_classic()之下,这种算法更快,解决了模糊问题,并保证拓扑结果正确。因此,除非经典算法有特定需求,否则此算法通常是更好的选择。

参数:体积:(M,N,P)数组输入数据体积以查找等值面。如有必要,将在内部转换为float32。level:float用于在体积中搜索等值面的轮廓值。如果没有给出或无,则使用vol的最小值和最大值的平均值。间距:长度为3的浮点数元素体积空间中的体素间距对应于体积中的numpy阵列索引尺寸(M,N,P)。gradient_direction:string控制网格是从等值面生成的,具有向感兴趣对象(默认值)的梯度下降,或者相反,考虑左边的规则。这两个选项是:*下降:对象大于外部*上升:外部大于对象step_size:int体素中的步长。默认值1.较大的步骤产生较快但较粗糙的结果。但结果始终是拓扑正确的。allow_degenerate:bool是否允许最终结果中的退化(即零面积)三角形。默认为真。如果为False,则退化三角形被删除,代价是使算法变慢。use_classic:bool如果给出和True,则使用Lorensen(1987)的经典行军立方体。此选项仅供参考。请注意,该算法具有不明确性,不能保证产生拓扑正确的结果。使用此选项的结果通常不会与marching_cubes_classic()函数相同。此选项仅供参考。请注意,该算法具有不明确性,不能保证产生拓扑正确的结果。使用此选项的结果通常不会与marching_cubes_classic()函数相同。此选项仅供参考。请注意,该算法具有不明确性,不能保证产生拓扑正确的结果。使用此选项的结果通常不会与marching_cubes_classic()函数相同。
返回:verts:(V,3)数组V唯一网格顶点的空间坐标。坐标顺序与输入音量(M,N,P)相匹配。faces:(F,3)数组通过引用vert的顶点索引定义三角形面。该算法专门输出三角形,因此每个面都有三个索引。法线:(V,3)数组每个顶点的法线方向,从数据计算得出。值:(V,)数组给出每个顶点附近局部区域数据的最大值的度量。这可以由可视化工具用于将颜色映射应用到网格。

扩展内容

skimage.measure.marching_cubes_classic, skimage.measure.mesh_surface_area

注意

算法1是Chernyaev的Marching Cubes 33算法的改进版本。这是一种高效的算法,它依赖大量查找表来处理许多不同的情况,使算法相对简单。这个实现是用Cython编写的,从Lewiner的C ++实现中移植过来的。

为了量化该算法生成的等值面的面积,将vert和faces传递给skimage.measure.mesh_surface_area

关于算法输出的可视化,要myvolume使用以下mayavi程序包勾画关于等级0.0 命名的卷:

>>> from mayavi import mlab >>> verts, faces, normals, values = marching_cubes(myvolume, 0.0) >>> mlab.triangular_mesh([vert[0] for vert in verts], ... [vert[1] for vert in verts], ... [vert[2] for vert in verts], ... faces) >>> mlab.show()

同样使用visvis软件包:

>>> import visvis as vv >>> verts, faces, normals, values = marching_cubes_classic(myvolume, 0.0) >>> vv.mesh(np.fliplr(verts), faces, normals, values) >>> vv.use().Run()

参考

R337Thomas Lewiner,Helio Lopes,Antonio Wilson Vieira和Geovan Tavares。有拓扑保证的Marching Cubes案例的有效实现。Journal of Graphics Tools 8(2)第1-15页(2003年12月)。DOI:10.1080 / 10867651.2003.10487582

marching_cubes_classic

skimage.measure.marching_cubes_classic(volume, level=None, spacing=(1.0, 1.0, 1.0), gradient_direction='descent')[资源]

经典的游动立方体算法,用于查找3D体积数据中的曲面。

请注意,该marching_cubes()算法推荐使用此算法,因为它速度更快,效果更好。

参数:体积:(M,N,P)双精度数组输入数据体积以查找等值面。将转换为np.float64。level:float用于在体积中搜索等值面的轮廓值。如果没有给出或无,则使用vol的最小值和最大值的平均值。间距:长度为3的浮点数元素体积空间中的体素间距对应于体积中的numpy阵列索引尺寸(M,N,P)。gradient_direction:string控制网格是从等值面生成的,梯度下降到感兴趣的对象(默认值),或者相反。这两个选项是:*下降:对象比外部大*上升:外部大于对象
返回:verts:(V,3)数组V唯一网格顶点的空间坐标。坐标顺序与输入音量(M,N,P)相匹配。faces:(F,3)数组通过引用vert的顶点索引定义三角形面。该算法专门输出三角形,因此每个面都有三个索引。

扩展内容

skimage.measure.marching_cubes, skimage.measure.mesh_surface_area

注意

行进立方体算法按照[R338]中的描述执行。这里有一个简单的解释:

http://www.essi.fr/~lingrand/MarchingCubes/algo.html

行军立方体算法中有几种已知的模糊情况。使用如[R338],图4中的点标记,如图所示:

v8 ------ v7 / | / | y / | / | ^ z v4 ------ v3 | | / | v5 ----|- v6 |/ (note: NOT right handed!) | / | / ----> x | / | / v1 ------ v2

最值得注意的是,如果v4,v8,v2和v6全都> = level(或者这种情况的任何泛化),则通过该算法生成两个平行平面,从v2和v6分离v4和v8。一个同样有效的解释是将所有四个点连接起来的单个连接的薄表面。这是最为人所知的歧义,尽管还有其他的。

该算法不会尝试解决这种模糊问题; 它是[R338]中的行军立方体的幼稚执行,但可能是使用更新技术(双行进立方体,延伸行进立方体,立方体行进方形等)开展工作的良好开端。

由于相邻立方体之间的相互作用,由该算法生成的等值面不能保证被关闭,特别是对于复杂的轮廓。此外,该算法不保证会返回单个轮廓。事实上,level无论连通性如何,都会找到交叉的所有等值面。

输出是一个由一组独特的顶点和连接三角形组成的三角形网格。输出列表中这些顶点和三角形的x,y,z顺序由轮廓中最小(按字典顺序)坐标确定。这是输入数组如何遍历的副作用,但可以依赖。

生成的网格从版本0.12开始保证一致的方向。

为了量化该算法产生的等值面的面积,将输出直接传递给skimage.measure.mesh_surface_area

参考

R338(1,2,3,4)洛伦森,威廉和哈维E.克莱恩。Marching Cubes:一种高分辨率3D表面构建算法。Computer Graphics(SIGGRAPH 87 Proceedings)21(4)1987年7月,p。163-170)。DOI:10.1145 / 37401.37422

marching_cubes_lewiner

skimage.measure.marching_cubes_lewiner(volume, level=None, spacing=(1.0, 1.0, 1.0), gradient_direction='descent', step_size=1, allow_degenerate=True, use_classic=False)[资源]

别名marching_cubes()

mesh_surface_area

skimage.measure.mesh_surface_area(verts, faces)[资源]

计算表面积,给定顶点和三角形面

参数:verts:(V,3)浮点数组包含V唯一网格顶点的(x,y,z)坐标的数组。faces:(F,3)ints的数组列出长度为3的整数列表,引用vert中的顶点坐标
返回:area:float网格的表面区域。单位现在协调单位** 2。

扩展内容

skimage.measure.marching_cubes, skimage.measure.marching_cubes_classic, skimage.measure.correct_mesh_orientation

注意

这个函数所期望的参数是skimage.measure.marching_cubes的前两个输出。 对于单位正确的输出,确保正确的间距已传递到skimage.measure.marching_cubes。

只有faces提供的都是三角形,该算法才能正常工作。

瞬间

skimage.measure.moments(image, order=3)[资源]

计算所有原始图像时刻达到一定的顺序。

可以从原始图像时刻计算以下属性:

  • 面积为:m[0, 0]

  • 质心为:{ m[0, 1] / m[0, 0]m[1, 0] / m[0, 0]}。

请注意,原始时刻既不是平移,也不是旋转不变。

参数:图像:2D double或uint8阵列栅格化形状作为图像。order:int,可选的最大矩次序。默认值是3。
返回:m:(order + 1,order + 1)array Raw image moments。

参考

R339威廉汉堡,马克布吉。数字图像处理原理:核心算法。施普林格出版社,伦敦,2009年。

R340B.Jähne。数字图像处理。Springer-Verlag,Berlin-Heidelberg,第6版,2005。

R341TH赖斯。在计算机科学讲义中,使用不变图像特征识别平面对象,p。柏林,斯普林格,1993年。

R342http://en.wikipedia.org/wiki/Image_moment

例子

>>> image = np.zeros((20, 20), dtype=np.double) >>> image[13:17, 13:17] = 1 >>> m = moments(image) >>> cr = m[0, 1] / m[0, 0] >>> cc = m[1, 0] / m[0, 0] >>> cr, cc (14.5, 14.5)

moments_central

skimage.measure.moments_central(image, cr, cc, order=3)[资源]

计算所有的中心图像时刻达到一定的顺序。

中心坐标(cr,cc)可以从原始时刻计算为:{ m[0, 1] / m[0, 0]m[1, 0] / m[0, 0]}。

请注意,中心矩是平移不变的,但不具有比例和旋转不变性。

参数:图像:2D double或uint8阵列栅格化形状作为图像。cr:双中心行坐标。cc:双中心列坐标。order:int,可选的最大矩次序。默认值是3。
返回:mu:(order + 1,order + 1)中央阵列图像时刻。

参考

R343威廉汉堡,马克布吉。数字图像处理原理:核心算法。施普林格出版社,伦敦,2009年。

R 344B.Jähne。数字图像处理。Springer-Verlag,Berlin-Heidelberg,第6版,2005。

R345TH赖斯。在计算机科学讲义中,使用不变图像特征识别平面对象,p。柏林,斯普林格,1993年。

R346http://en.wikipedia.org/wiki/Image_moment

例子

>>> image = np.zeros((20, 20), dtype=np.double) >>> image[13:17, 13:17] = 1 >>> m = moments(image) >>> cr = m[0, 1] / m[0, 0] >>> cc = m[1, 0] / m[0, 0] >>> moments_central(image, cr, cc) array([[ 16., 0., 20., 0.], [ 0., 0., 0., 0.], [ 20., 0., 25., 0.], [ 0., 0., 0., 0.]])

moments_hu

skimage.measure.moments_hu(nu)[资源]

计算胡的一组图像时刻。

请注意,这组时间可以证明是平移,缩放和旋转不变。

参数:nu:(M,M)阵列归一化中心图像矩,其中M必须> 4。
返回:不:(7,1)排列胡的一组图像时刻。

参考

R347MK Hu,“用​​矩不变量进行视觉模式识别”,IRE Trans。信息。理论,第一卷。IT-8,pp.179-187,1962

R348威廉汉堡,马克布吉。数字图像处理原理:核心算法。施普林格出版社,伦敦,2009年。

R349B.Jähne。数字图像处理。Springer-Verlag,Berlin-Heidelberg,第6版,2005。

R350TH赖斯。在计算机科学讲义中,使用不变图像特征识别平面对象,p。柏林,斯普林格,1993年。

R351http://en.wikipedia.org/wiki/Image_moment

moments_normalized

skimage.measure.moments_normalized(mu, order=3)[资源]

计算所有归一化的中心图像时刻,达到一定的顺序。

请注意,归一化的中心矩是平移和比例不变的,但不是旋转不变的。

参数:mu:(M,M)阵列中心图像矩,其中M必须>有序。order:int,可选的最大矩次序。默认值是3。
返回:nu:(order + 1,order + 1)array归一化中心图像矩。

参考

R352威廉汉堡,马克布吉。数字图像处理原理:核心算法。施普林格出版社,伦敦,2009年。

R353B.Jähne。数字图像处理。Springer-Verlag,Berlin-Heidelberg,第6版,2005。

R354TH赖斯。在计算机科学讲义中,使用不变图像特征识别平面对象,p。柏林,斯普林格,1993年。

R355http://en.wikipedia.org/wiki/Image_moment

例子

>>> image = np.zeros((20, 20), dtype=np.double) >>> image[13:17, 13:17] = 1 >>> m = moments(image) >>> cr = m[0, 1] / m[0, 0] >>> cc = m[1, 0] / m[0, 0] >>> mu = moments_central(image, cr, cc) >>> moments_normalized(mu) array([[ nan, nan, 0.078125 , 0. ], [ nan, 0. , 0. , 0. ], [ 0.078125 , 0. , 0.00610352, 0. ], [ 0. , 0. , 0. , 0. ]])

周长

skimage.measure.perimeter(image, neighbourhood=4)[资源]

计算二进制图像中所有对象的总周长。

参数:image:数组二进制图像。邻域:4或8,可选的邻域连通性,用于确定边界像素。
返回:周长:float二进制映像中所有对象的总周长。

参考

R356K. Benkrid,D. Crookes。周界估计器的设计与FPGA实现。贝尔法斯特女王大学。http://www.cs.qub.ac.uk/~d.crookes/webpubs/papers/perimeter.doc

points_in_poly

skimage.measure.points_in_poly(points, verts)[资源]

测试点是否位于多边形内。

参数:点:(N,2)数组输入点,(x,y)。verts:(M,2)数组多边形的顶点,顺时针或逆时针排序。第一点可能(但不需要)重复。
返回:mask:(N,)bool数组如果对应点位于多边形内,则为真。

扩展内容

grid_points_in_poly

profile_line

skimage.measure.profile_line(img, src, dst, linewidth=1, order=1, mode='constant', cval=0.0)[资源]

返回沿扫描线测量的图像的强度分布。

参数:img:数组数组,形状(M,N,C)图像可以是灰度(二维数组)或多通道(3D数组,其中最后一个轴包含通道信息)。src:数字标量的2元组(float或int)扫描线的起点。dst:数字标量的2元组(float或int)扫描行的结束点。目标点包含在配置文件中,与标准numpy索引相对照。linewidth:int,可选扫描宽度,垂直于行顺序:int in {0,1,2,3,4,5},可选样条插值的顺序,用于计算非整数坐标处的图像值。0表示最近邻居插值。模式:{'constant','nearest','reflect','mirror','wrap'},可选如何计算任何落在图像外的值。cval:float,可选如果mode是'constant',
返回:return_value:array沿扫描线的强度轮廓。轮廓的长度是扫描线的计算长度的细胞。

例子

>>> x = np.array([[1, 1, 1, 2, 2, 2]]) >>> img = np.vstack([np.zeros_like(x), x, x, x, np.zeros_like(x)]) >>> img array([[0, 0, 0, 0, 0, 0], [1, 1, 1, 2, 2, 2], [1, 1, 1, 2, 2, 2], [1, 1, 1, 2, 2, 2], [0, 0, 0, 0, 0, 0]]) >>> profile_line(img, (2, 1), (2, 4)) array([ 1., 1., 2., 2.]) >>> profile_line(img, (1, 0), (1, 6), cval=4) array([ 1., 1., 1., 2., 2., 2., 4.])

与标准numpy索引相比,目标点包含在配置文件中。例如:>>> profile_line(img,(1,0),(1,6))#最后一个点超出数组(1.,1.,1.,2.,2.,2., 0)>>> profile_line(img,(1,0),(1,5))#这将访问完整的第一行数组(1.,1.,1.,2.,2.,2.)

ransac

skimage.measure.ransac(data, model_class, min_samples, residual_threshold, is_data_valid=None, is_model_valid=None, max_trials=100, stop_sample_num=inf, stop_residuals_sum=0, stop_probability=1, random_state=None)[资源]

使用RANSAC(随机样本一致性)算法将模型拟合到数据。

RANSAC是一个迭代算法,用于从完整数据集的内部子集中对参数进行鲁棒估计。每次迭代执行以下任务:

  • min_samples从原始数据中选择随机样本并检查该组数据是否有效(请参阅is_data_valid)。

  • 估计模型到随机子集(model_cls.estimate(*data[random_subset])并检查估计模型是否有效(请参阅is_model_valid)。

  • 通过计算估计模型的残差(model_cls.residuals(*data)),将所有数据分类为内部值或外部值- 所有残差小于该值的数据样本residual_threshold均视为内部值。

  • 如果内部样本数量最大,则将估计模型保存为最佳模型。如果当前估计的模型具有相同数量的内点,则只有当它具有较少的残差总和时才被认为是最佳模型。

这些步骤要么执行最多次数,要么直到满足特殊停止条件之一。使用先前确定的最佳模型的所有inlier样本估计最终模型。

参数:数据:列表,数组的元组数据集的模型拟合,其中N是数据点的数量,D是数据的维数。如果模型类需要多个输入数据数组(例如skimage.transform.AffineTransform的源坐标和目标坐标),则它们可以选择作为元组或列表传递。请注意,在这种情况下,函数估计(*数据),残差(*数据),is_model_valid(model,* random_data)和is_data_valid(* random_data)必须将每个数据数组作为单独的参数。model_class:object具有以下对象方法的对象:成功=估计(*数据)残差(*数据)成功指示模型估计是否成功(成功为True或无,成功失败为False)。min_samples:int适合模型的最小数据点数。residual_threshold:浮点数据点的最大距离被归类为一个inlier。is_data_valid:function,optional在模型拟合之前,随机选择的数据调用此函数:is_data_valid(* random_data)。is_model_valid:function,optional使用估计模型和随机选择的数据调用此函数:is_model_valid(model,* random_data),。max_trials:int,可选用于随机样本选择的最大迭代次数。stop_sample_num:int,可选如果至少找到了这个数量的内点,则停止迭代。stop_residuals_sum:float,可选如果残差总和小于或等于此阈值,则停止迭代。stop_probability:在范围0,1中浮点数,如果至少有一个无异常值的训练数据集以概率> 1进行采样,则可选RANSAC迭代停止。= stop_probability,取决于当前最佳模型的内点比率和试验次数。这需要产生至少N个样本(试验):其中概率(置信度)通常被设置为诸如0.99的高值,并且e(n)= log(1-概率)/ log是当前内部样本数量与样本总数之比。random_state:int,RandomState实例或None,可选If int,random_state是随机数生成器使用的种子; 如果RandomState实例,random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。= log(1-概率)/ log(1-e ** m)其中概率(置信度)通常被设置为诸如0.99的高值,并且e是当前内部对于样本总数的分数。random_state:int,RandomState实例或None,可选If int,random_state是随机数生成器使用的种子; 如果RandomState实例,random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。= log(1-概率)/ log(1-e ** m)其中概率(置信度)通常被设置为诸如0.99的高值,并且e是当前内部对于样本总数的分数。random_state:int,RandomState实例或None,可选If int,random_state是随机数生成器使用的种子; 如果RandomState实例,random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。
返回:模型:对象具有最大共识集合的最佳模型。inliers:(N,)数组的内部布尔值,被归类为True。

  • success = estimate(*data)

  • residuals(*data)

其中success表示模型估计是否成功(TrueNone成功,False失败)。

min_samples : int

适合模型的最小数据点数。

residual_threshold : float

一个数据点的最大距离被归类为一个inlier。

is_data_valid : function, optional

在模型适用之前,随机选择的数据调用该函数:is_data_valid(*random_data)

is_model_valid : function, optional

使用估计模型和随机选择的数据调用该函数:is_model_valid(model, *random_data),。

max_trials : int, optional

随机样本选择的最大迭代次数。

stop_sample_num : int, optional

如果至少找到这个数量的内点,停止迭代。

stop_residuals_sum : float, optional

如果残差总和小于或等于此阈值,则停止迭代。

stop_probability : float in range 0, 1, optional

如果至少有一个无异常值的训练数据集被采样probability >= stop_probability,RANSAC迭代将停止,取决于当前最佳模型的内点比率和试验次数。这需要至少生成N个样本(试验):

N >= log(1 - probability) / log(1 - e**m)

其中概率(置信度)通常设置为诸如0.99的高值,并且e是当前的内部分数对于样本的总数。

random_state : int, RandomState instance or None, optional

如果是int,random_state是随机数发生器使用的种子; 如果RandomState实例,random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。

Returns: **model** : object

最大共识集合的最佳模式。

inliers : (N, ) array

内部分类为布尔值的掩码True

参考

R357“RANSAC”, Wikipedia, http://en.wikipedia.org/wiki/RANSAC

例子

无倾斜地生成椭圆数据并添加噪音:

>>> t = np.linspace(0, 2 * np.pi, 50) >>> xc, yc = 20, 30 >>> a, b = 5, 10 >>> x = xc + a * np.cos(t) >>> y = yc + b * np.sin(t) >>> data = np.column_stack([x, y]) >>> np.random.seed(seed=1234) >>> data += np.random.normal(size=data.shape)

添加一些错误数据:

>>> data[0] = (100, 100) >>> data[1] = (110, 120) >>> data[2] = (120, 130) >>> data[3] = (140, 130)

使用所有可用数据估计椭圆模型:

>>> model = EllipseModel() >>> model.estimate(data) True >>> np.round(model.params) array([ 72., 75., 77., 14., 1.])

使用RANSAC估计椭圆模型:

>>> ransac_model, inliers = ransac(data, EllipseModel, 20, 3, max_trials=50) >>> abs(np.round(ransac_model.params)) array([ 20., 30., 5., 10., 0.]) >>> inliers array([False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True], dtype=bool) >>> sum(inliers) > 40 True

稳健估计几何变换:

>>> from skimage.transform import SimilarityTransform >>> np.random.seed(0) >>> src = 100 * np.random.rand(50, 2) >>> model0 = SimilarityTransform(scale=0.5, rotation=1, ... translation=(10, 20)) >>> dst = model0(src) >>> dst[0] = (10000, 10000) >>> dst[1] = (-100, 100) >>> dst[2] = (50, 50) >>> model, inliers = ransac((src, dst), SimilarityTransform, 2, 10) >>> inliers array([False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True], dtype=bool)

regionprops

skimage.measure.regionprops(label_image, intensity_image=None, cache=True)[资源]

测量标记的图像区域的属性。

参数:label_image:(N,M)ndarray标记的输入图像。值为0的标签将被忽略。intensity_image:(N,M)ndarray,可选强度(即输入)与标记图像大小相同的图像。缺省值是None。cache:bool,可选确定是否缓存计算的属性。缓存属性的计算速度要快得多,而内存消耗增加。
返回:属性:RegionProperties列表每个项目描述一个带标签的区域,并且可以使用下面列出的属性进行访问。

扩展内容

label

注意

以下属性可以作为属性或键来访问:

area:region.bbox的像素数目:tupleBounding框(min_row,min_col,max_row,max_col)。属于边界框的像素处于半开区间[min_row; max_row)和[min_col; max_col).bbox_area:边界的像素的数量box.centroid:arrayCentroid坐标元组(行,列).convex_area:int的凸包像素的数目image.convex_image:(H,J)ndarrayBinary凸包图像,其大小与bounding box.coords:区域的(N,2)ndarray坐标列表(行,列).eccentricity:与区域具有相同二次矩的椭圆的椭圆度。偏心率是焦距(焦点之间的距离)在长轴长度上的比率。该值位于区间[0,1)中。当它为0时,椭圆变为一个圆。equivalent_diameter:float与区域面积相同的圆的直径。euler_number:区域的intEuler特性。计算为对象数(= 1)减去孔的数量(8连通性).extent:区域中像素的floatRatio与总边界框中的像素的比率。计算为area /(rows * cols)filled_area:int填充区域的像素数目。填充图像:(H,J)具有与边界框大小相同的填充空洞的ndarrayBinary区域图像。图像:(H,J)ndarray切片二进制区域与边界框尺寸相同的图像.inertia_tensor:(2,2)ndarrayInertia张量,用于围绕其mass.inertia_tensor_eigvals旋转的区域张量:tuple惯性张量的两个本征值,以递减顺序排列.intensity_image:ndarrayImage在区域边界框内.label:int标注的输入图像中的标签image.local_centroid:arrayCentroid坐标元组(行,列),相对于区域边界box.major_axis_length:float椭圆长轴的长度,与区域具有相同的归一化第二中心矩.max_intensity:floatValue,该区域中的最大强度.mean_intensity:floatValue,该区域的平均强度为.min_intensity:floatValue,该区域中的最小强度为.m inor_axis_length:float具有与region相同的归一化第二中心矩的椭圆短轴的长度.moments:(3,3)ndarray

空间时刻达3阶:

m_ji = sum{ array(x, y) * x^j * y^i }

其中总和超过xy协调区域。

moments_central : (3, 3) ndarray

中央时刻(平移不变)达3阶:

mu_ji = sum{ array(x, y) * (x - x_c)^j * (y - y_c)^i }

其中总和超过xy协调区域,并且x_cy_c是该地区的质心的坐标。

moments_hu : tuple Hu时刻(平移,缩放和旋转不变)。moments_normalized : (3, 3) ndarray

归一化矩(平移和尺度不变)高达3阶:

nu_ji = mu_ji / m_00^[(i+j)/2 + 1]

m_00第零空间时刻所在的位置

orientation:floatAngle在X轴和具有与该区域相同的二阶矩的椭圆长轴之间。 从pi / 2逆时针方向到pi / 2 .perimeter:float对象的周长,通过使用4-connectivity.solidity:floatRatio将该区域中的像素近似为通过边界像素中心的线条 (3,3)image.weighted_centroid:arrayCentroid坐标元组(行,列)用强度加权image.weighted_local_centroid:arrayCentroid坐标元组(行,列),相对于区域边界框,用强度加权image.weighted_moments:(3,3)ndarray

强度图像的空间力矩高达3阶:

wm_ji = sum{ array(x, y) * x^j * y^i }

其中总和超过xy协调区域。

weighted_moments_central : (3, 3) ndarray

强度图像的中心矩(平移不变量)达到3阶:

wmu_ji = sum{ array(x, y) * (x - x_c)^j * (y - y_c)^i }

其中总和超过xy协调区域,并且x_cy_c是该地区的加权质心坐标。

weighted_moments_hu : tupleHu时刻(平移,缩放和旋转不变)强度图像。weighted_moments_normalized : (3, 3) ndarray

强度图像的归一化矩(平移和尺度不变)高达3阶:

wnu_ji = wmu_ji / wm_00^[(i+j)/2 + 1]

wm_00零度空间时刻(强度加权区域)所在的位置

每个区域也支持迭代,所以你可以这样做:

for prop in region: print(prop, region[prop])

参考

R358威廉汉堡,马克布吉。数字图像处理原理:核心算法。施普林格出版社,伦敦,2009年。

R359B.Jähne。数字图像处理。Springer-Verlag,Berlin-Heidelberg,第6版,2005。

R360TH赖斯。在计算机科学讲义中,使用不变图像特征识别平面对象,p。柏林,斯普林格,1993年。

R361http://en.wikipedia.org/wiki/Image_moment

例子

>>> from skimage import data, util >>> from skimage.measure import label >>> img = util.img_as_ubyte(data.coins()) > 110 >>> label_img = label(img, connectivity=img.ndim) >>> props = regionprops(label_img) >>> # centroid of first labeled object >>> props[0].centroid (22.729879860483141, 81.912285234465827) >>> # centroid of first labeled object >>> props[0]['centroid'] (22.729879860483141, 81.912285234465827)

shannon_entropy

skimage.measure.shannon_entropy(image, base=2)[资源]

计算图像的香农熵。

香农熵定义为S = -sum(pk * log(pk)),其中pk是值为k的像素的数量。

参数:图像:(N,M)ndarray灰度输入图像。base:float,可选要使用的对数基数。
返回:熵:浮动

注意

返回的值以位或shannon(Sh)为基数= 2,自然单位(nat)为基数= np.e,hartley(Hart)为基数= 10测量。

参考

R362https://en.wikipedia.org/wiki/Entropy_(information_theory)

R363https://en.wiktionary.org/wiki/Shannon_entropy

例子

>>> from skimage import data >>> shannon_entropy(data.camera()) 17.732031303342747

structural_similarity

skimage.measure.structural_similarity(X, Y, win_size=None, gradient=False, dynamic_range=None, multichannel=False, gaussian_weights=False, full=False, **kwargs)[资源]

弃用功能compare_ssim改为使用。

subdivide_polygon

skimage.measure.subdivide_polygon(coords, degree=2, preserve_ends=False)[资源]

使用B样条对多边形曲线进行细分。

请注意,生成的曲线始终位于原始多边形的凸包内。细分后,圆形多边形保持关闭状态。

参数:坐标:(N,2)阵列坐标数组。度:{1,2,3,4,5,6,7},可选的B样条度。默认值为2. preserve_ends:bool,可选保留非圆形多边形的第一个和最后一个坐标。默认值是False。
返回:坐标:(M,2)数组细分坐标数组。

参考

R364http://mrl.nyu.edu/publications/subdiv-course2000/coursenotes00.pdf

CircleModel

class skimage.measure.CircleModel[资源]

基地: skimage.measure.fit.BaseModel

2D圆圈的总体最小二乘估计量。

圈子的功能模型是:

r**2 = (x - xc)**2 + (y - yc)**2

这个估计量最小化所有点到圆的平方距离:

min{ sum((r - sqrt((x_i - xc)**2 + (y_i - yc)**2))**2) }

最少需要3个点才能解决参数问题。

属性

PARAMS(元组)循环模型参数按以下顺序xc,yc,r。

__init__()[source]estimate(data)[source]

使用总体最小二乘法从数据中估计圆圈模型。

参数:数据:(N,2)数组N分别具有(x,y)坐标。
返回:成功:布尔如果模型估计成功,则为真。

predict_xy(t, params=None)[资源]

使用估计的模型预测x和y坐标。

参数:t:以弧度表示圆弧中的角度。在右手系统中,角度从正X轴到正Y轴开始计数。参数:(3,)数组,可选可选自定义参数集。
返回:xy:(...,2)数组预测的x和y坐标。

residuals(data)[资源]

确定要建模的数据的残差。

对于每个点,返回到圆的最短距离。

参数:数据:(N,2)数组N分别具有(x,y)坐标。
返回:残差:(N,)阵列每个数据点的残差。

EllipseModel

class skimage.measure.EllipseModel[资源]

基地: skimage.measure.fit.BaseModel

2D椭圆的总体最小二乘估计量。

椭圆的功能模型是:

xt = xc + a*cos(theta)*cos(t) - b*sin(theta)*sin(t) yt = yc + a*sin(theta)*cos(t) + b*cos(theta)*sin(t) d = sqrt((x - xt)**2 + (y - yt)**2)

其中(xt, yt)是椭圆上最近的点(x, y)。因此d是从点到椭圆的最短距离。

估计器基于最小二乘法最小化。最佳解决方案是直接计算的,不需要迭代。这导致了一种简单,稳定和可靠的拟合方法。

params属性按以下顺序包含参数:

xc, yc, a, b, theta

例子

>>> xy = EllipseModel().predict_xy(np.linspace(0, 2 * np.pi, 25), ... params=(10, 15, 4, 8, np.deg2rad(30))) >>> ellipse = EllipseModel() >>> ellipse.estimate(xy) True >>> np.round(ellipse.params, 2) array([ 10. , 15. , 4. , 8. , 0.52]) >>> np.round(abs(ellipse.residuals(xy)), 5) array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

属性

PARAMS(元组)椭圆模型参数按照以下顺序xc,yc,a,b,theta。

__init__()[来源] estimate(data)[来源]

使用总体最小二乘法从数据中估计圆圈模型。

参数:数据:(N,2)数组N分别具有(x,y)坐标。
返回:成功:布尔如果模型估计成功,则为真。

参考

R365哈利尔,R。Flusser,J。“数值稳定的椭圆直接最小二乘拟合”。在Proc。第六届中欧计算机图形和可视化国际会议。WSCG(第98卷,第125-132页)。

predict_xy(t, params=None)[资源]

使用估计的模型预测x和y坐标。

参数:t:以弧度表示圆弧中的角度。在右手系统中,角度从正X轴到正Y轴开始计数。参数:(5,)数组,可选可选自定义参数集。
返回:xy:(...,2)数组预测的x和y坐标。

residuals(data)[资源]

确定要建模的数据的残差。

对于每个点,返回到椭圆的最短距离。

参数:数据:(N,2)数组N分别具有(x,y)坐标。
返回:残差:(N,)阵列每个数据点的残差。

LineModel

class skimage.measure.LineModel[资源]

基地: skimage.measure.fit.BaseModel

2D线的总最小二乘估计量。

使用极坐标将线条参数化为功能模型:

dist = x * cos(theta) + y * sin(theta)

与标准线型相比,此参数化可以模拟垂直线y = a*x + b

这个估计量最小化所有点到线的平方距离:

min{ sum((dist - x_i * cos(theta) + y_i * sin(theta))**2) }

需要最少数量的2个点来解决参数。

已弃用的课程LineModelND改为使用。

属性

PARAMS(元组)线模型参数按以下顺序dist,theta。

__init__()[来源] estimate(data)[来源]

使用总体最小二乘法从数据中估计线模型。

参数:数据:(N,2)数组N分别具有(x,y)坐标。
返回:成功:布尔如果模型估计成功,则为真。

predict_x(y, params=None)[资源]

使用估计的模型预测x坐标。

参数:y:数组y坐标。参数:(2,)数组,可选可选自定义参数集。
返回:x:数组预测的x坐标。

predict_y(x, params=None)[资源]

使用估计的模型预测y坐标。

参数:x:数组x坐标。参数:(2,)数组,可选可选自定义参数集。
返回:y:数组预测的y坐标。

residuals(data)[资源]

确定要建模的数据的残差。

对于每个点,返回到该线的最短距离。

参数:数据:(N,2)数组N分别具有(x,y)坐标。
返回:残差:(N,)阵列每个数据点的残差。

LineModelND

class skimage.measure.LineModelND[资源]

基地: skimage.measure.fit.BaseModel

N维线的总体最小二乘估计量。

线根据以下矢量方程由点(原点)和单位矢量(方向)定义:

X = origin + lambda * direction

属性

PARAMS(元组)Line model参数按以下顺序来源,方向。

__init__()[来源] estimate(data)[来源]

根据数据估计线模型。

参数:数据:(N,dim)数组N指向维数dim> = 2的空间。
返回:成功:布尔如果模型估计成功,则为真。

predict(x, axis=0, params=None)[资源]

预测估计的线模型与正交于给定轴的超平面的交点。

参数:x:沿轴的阵列坐标。axis:与与该线相交的超平面正交的int轴。参数:(2,)数组,可选可选的自定义参数在窗体(原点,方向)中设置。
返回:y:数组预测的坐标。如果该行与给定轴平行,则会引发ValueError。

predict_x(y, params=None)[资源]

使用估计的模型预测2D线的x坐标。

别名为:

predict(y, axis=1)[:, 0]

参数:y:数组y坐标。参数:(2,)数组,可选可选的自定义参数在窗体(原点,方向)中设置。
返回:x:数组预测的x坐标。

predict_y(x, params=None)[资源]

使用估计的模型预测二维线的y坐标。

别名为:

predict(x, axis=0)[:, 1]

参数:x:数组x坐标。参数:(2,)数组,可选可选的自定义参数在窗体(原点,方向)中设置。
返回:y:数组预测的y坐标。

residuals(data)[资源]

确定要建模的数据的残差。

对于每个点,返回到该线的最短距离。它是通过将数据投影到线上而获得的。

参数:数据:(N,dim)数组N指向维度为dim的空间。
返回:残差:(N,)阵列每个数据点的残差。