#python #scikit-image
#python #scikit-изображение
Вопрос:
Я пытаюсь выяснить, какие регионы подключены. Я просмотрел документацию 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
Ответ №1:
Вам нужен граф смежности регионов или 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, поэтому вы можете проверить эту документацию для получения дополнительной информации.
Наконец, обратите внимание, что RAG собирается перейти с skimage.future.graph
на skimage.segmentation.graph
в предстоящем выпуске scikit-image версии 0.18, поэтому вам следует следить за этим изменением!