当我测试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.as有时它可以是6,无论它是方形矩形还是任何其他多边形。
更新:=
(1)The function page
答案 0 :(得分:2)
您使用的是哪个版本的skimage? 版本0.6和github sources没有skimage.measure.perimeter函数。
另外,我认为你的意思是第3行:image[10:30, 10:30] = 1
修改强>
好的,我想我明白了。该函数在版本0.7.1中的_regionprops.py中定义。 结果76实际上是正确的。它计算白色方形的周长(20,20)。
您认为每一方占20像素,总计为80像素。但通过这样做,你可以计算两倍的角点像素。删除您最终的边角像素,周长为76像素。
对于其他形状,差异可能不是4像素。
修改2
查看源代码和文档:
将轮廓近似为直线的物体周长 使用4连接通过边界像素的中心。
代码计算一个border_image,它由图像减去其侵蚀组成。这个数组对应于我在第一次编辑中的周长的想法。
然后通过对边框图像应用卷积和加权和来计算周边。我认为这是为了计算通过边界像素中心的线的长度,如文档中所述。
如果您需要更多详细信息,请咨询开发人员。这是包中一个非常新的功能。
答案 1 :(得分:-1)
代码测量每个连接像素的中心到中心