1

当我测试scikit-image方法时,我遇到skimage.measure.perimeter(image)但无法解释这个函数的输出。

import numpy as np  
image=np.zeros((100,100))  
image[10:30,10:30]=1                   # this creates a white square  
from skimage.measure import perimeter  
x=perimeter(image)  
print x                               #Should be (20+20+20+20) = 80  
76.0        <<<<<<<<<< it returns this value

我误解了这个函数应该返回什么吗?我知道周长是围绕一个区域的路径。
注意:-
(1) 计算的周长和返回的周长之间的差异并不总是 4。因为有时它可以是 6,无论它是正方形、矩形还是任何其他多边形。
更新:=
(1)功能页面

4

2 回答 2

2

您使用的是哪个版本的 skimage?0.6 版和github 源没有 skimage.measure.perimeter 功能。

另外,我认为您的意思是第 3 行:image[10:30, 10:30] = 1

编辑

好的,我想我明白了。从 0.7.1 版本开始,该函数在 _regionprops.py 中定义。结果76其实是对的。它计算形状为 (20, 20) 的白色正方形的周长。

您认为每边占 20 个像素,总计 80 个像素。但是通过这样做,您可以计算两倍的角像素。移除角落像素,您最终会得到 76 像素的周长。

对于其他形状,差异可能不是 4 个像素。

编辑 2

查看源代码和文档:

  • regionprops 的文档说周长是周长的近似值:

使用 4 连接将轮廓近似为通过边界像素中心的线的对象周长。

  • 该代码计算一个由图像减去其侵蚀组成的边界图像。这个数组对应于我在第一次编辑中的周长概念。

  • 然后它通过对边界图像应用卷积和加权和来计算周长。我认为这样做是为了计算通过边界像素中心的线的长度,如文档中所述。

如果您想了解更多详细信息,您应该询问其中一位开发人员。这是包中的一个非常新的功能。

于 2012-10-17T13:16:38.417 回答
-1

代码测量中心到每个连接像素的中心

于 2021-02-17T05:53:42.627 回答