如何计算图像中对象的周长?

时间:2018-02-14 11:34:50

标签: python image-segmentation

我有一张图片。我想获得图像中每个对象的周长。例如,in this image,对象的周长为33(边缘处的像素数)。 我编写了以下算法,但这是非常及时的。

有没有人有想法提高算法的速度?

我尝试过:

def cal_perimeter_object(object, image):
peri_ = 0
for pixel_ in image:
    if pixel_is_in_neigbor_of_object() is True:
        peri_ += 1

return peri_

1 个答案:

答案 0 :(得分:1)

正如@Piinthesky在评论中所提到的那样,您知道要找到轮廓的对象的标签是布尔(或标记图像),这是第一步。有很多方法可以做到这一点,其中最简单的方法就是阈值处理。获得带标签的图片后,您可以通过多种方式找到周边 - 例如沿边界的像素数。为了让您在这里开始先行,可以在link放置的图像上进行操作。我使用过scikit-image但你可以使用其他的python库。

# If your python version is not 3.x uncomment line below
#from __future__ import print_function
from skimage.measure import label, regionprops
import skimage.io as io
# read in the image (enter the path where you downloaded it on your computer below
im = io.imread('/home/kola/Downloads/perimeter.png')
# To simplify things I am only using the first channel and thresholding
# to get a boolean image
bw = im[:,:,0] > 230
regions = regionprops(bw.astype(int))
print(regions[0].perimeter)