Scikit skimage regionsprops получает подключенные регионы (python)

#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, поэтому вам следует следить за этим изменением!