2014-10-07 137 views
2

有一个很好的实现超分辨率段代(SLIC)的skimage.segmentation包在Python sklearn包。skimage SLIC:让相邻部分

在SLIC()方法返回的整数集的标签。我的问题是如何获得彼此的空间邻居的分段?我想要做的是使用这些段来构建图形,并且边缘将连接直接的邻居。但是,我无法弄清楚如何获得细分市场的直接邻居。

的Python代码来执行SLIC如下:

from skimage import io 
from skimage.segmentation import slic 
from skimage.segmentation import find_boundaries 
# An image of dimensions 300, 300 
image = img_as_float(io.imread("image.png")) 

# call slic. This returns an numpy array which assigns to every 
# pixel in the image an integer label 
# So segments is a numpy array of shape (300, 300) 
segments = slic(image, 100, sigma = 5) 

# Now I want to know the neighbourhood segment for each super-pixel 
# There is a method called find_boundaries which returns a boolean 
# for every pixel to show if it is a boundary pixel or not. 

b = find_boundaries(segments) 

在这里,我坚持。我想知道如何解析这个边界索引并找出给定的标签索引(比如0),哪些标签索引共享一个索引为0的边界。有没有一种方法可以有效地完成这个操作,而不需要遍历边界数组为每个标签索引?

+1

它总是重要的是要告诉人们[你已经试过(http://whathaveyoutried.com/),包括任何片段失败的尝试,使他们能够了解什么门路,你已经错过了。这很重要,因为它激励人们回答问题,这很重要,因为它可以让问题更容易提供高质量的相关答案。就目前的问题来看,这尚未实现。 – Veedrac 2014-10-07 14:05:10

+0

这是一个公平点。我会稍后更新这个问题。 – Luca 2014-10-07 14:12:30

回答

7

我做到这一点的方法是构建包含从每个像素到其左侧和底部的像素(因此一个4附近)的边缘的曲线图,与他们的超像素数标记它们并删除重复。 你可以在my blog post找到代码和详细信息。

你可以找到一些相关的功能here,还以为他们是(还)没有很好的记录。

+0

非常感谢!很多从你的代码中学习。 – Luca 2014-10-07 22:09:45

+1

我一直希望写一篇博客文章解释整个分段回购。很快;) – 2014-10-08 15:16:02