问题描述
我正在尝试找出连接的区域。我搜索了scikit文档,但找不到解决方法。
这是我的代码的样子
def calculate_mask_info(labeled_2DImage):
features = pd.DataFrame()
id = 0
newmask = label(labeled_2DImage,connectivity=2) # seperate regions with same mean_intensity that are not connected
for region in regionprops(newmask,intensity_image=labeled_2DImage):
if region.mean_intensity < 1:
# Skip background (intensity 0)
continue
# connected regionds Id's -> how?
features = features.append([get_region_info(region,id)]) #function that puts region info into dictionary
id += 1
return features
def get_region_info(region,id):
feat_dict = {'id': id,'labelId': region.mean_intensity,'y': region.centroid[0],'x': region.centroid[1],}
return feat_dict
解决方法
您想要的是region adjacency graph,or RAG。您可以使用以下方法创建一个:
from skimage import future
rag = future.graph.RAG(newmask) # or labeled2D_image,not sure
然后您可以使用以下方法获取邻近地区:
list(rag.neighbors(region.label))
请注意,默认情况下,邻居包括背景标签(0),但是您可以使用以下方法将其删除:
rag.remove_node(0)
RAG是networkx Graph,因此您可以查看该文档以获取更多信息。
最后,请注意,在即将发布的scikit-image的0.18版本中,RAG将从skimage.future.graph
移至skimage.segmentation.graph
,所以您应该注意这一变化!