Изображение не маркируется правильно: как вернуть только один подключенный компонент? - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу предварительно обработать изображение

raw image

, чтобы сохранить только внутренний прямоугольный сегмент (т.е. удалить окружающий фон). Но я не получаю правильный результат, который был показан как

cropped image.

для меня.

Код довольно прост:

def labelim(img):
    #labeling image
    gray = rgb2gray(img) #translate rgb to gray
    val = filters.threshold_local(gray,5)
    mask = gray > val
    clean_border = segmentation.clear_border(mask)
    labeled = label(clean_border)
    signle_labeled = np.where(labeled == 0,labeled, 1)#ensure all assigned label return as 1.
    return single_labeled
def crop_img(img, labeled):    
    cropped_images = []
    pad = 20
    for region in regionprops(labeled):
        if region.area < 2000:
            continue
        minr,minc,maxr,maxc = region.bbox
        cropped_images.append(gray[minr-pad:maxr+pad, minc-pad:maxc+pad])
    for c, cropped_image in enumerate(cropped_images):
        cropim = cropped_image
    return cropim

labeled = labelim(img)
cropped_image = crop_img(img, labeled)

Тестовый код работает для другого из моих изображений, но не работает для большинства из них. Спасибо за любую помощь / предложение.

1 Ответ

0 голосов
/ 06 сентября 2018

Проблема решена:

одна маленькая ошибка здесь:

cropped_images.append(gray[minr-pad:maxr+pad, minc-pad:maxc+pad])

должно быть:

cropped_images.append(img[minr-pad:maxr+pad, minc-pad:maxc+pad])
...