【问题标题】:Can anyone explain why `skimage.measure.perimeter(img)` returns this result?谁能解释为什么`skimage.measure.perimeter(img)`返回这个结果?
【发布时间】:2012-10-07 16:50:03
【问题描述】:

当我测试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)The function page

【问题讨论】:

    标签: python image-processing scikits scikit-image


    【解决方案1】:

    您使用的是哪个版本的 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

    查看源代码和文档:

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

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

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

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

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

    【讨论】:

    • 我想到了这个,但考虑到b[0:20,10:50]=1 diff 是 6。如果你是对的,它应该仍然是 4。你不这么认为吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2021-05-13
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多