Сегментация изображения с использованием соответствующих масок в python - PullRequest
0 голосов
/ 20 октября 2018

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

Я помещаю изображения в одну папку, а соответствующие маски - в другую папку.Я пытаюсь применить эти маски или умножить их на изображения, используя два цикла for в python, чтобы получить сегментированные изображения.

Я использую код ниже:

def ImageSegmentation():

SegmentedImages = []

for img_path in os.listdir('C:/Users/mab/Desktop/images/'):
    img=io.imread('C:/Users/mab/Desktop/data/'+img_path)
    for img_path2 in os.listdir('C:/Users/mab/Desktop/masks/'):
        Mask = io.imread('C:/Users/mab/Desktop/masks/'+img_path2)

        [indx, indy] = np.where(Mask==0)
        Color_Masked = img.copy()
        Color_Masked[indx,indy] = 0

        matplotlib.image.imsave('C:/Users/mab/Desktop/SegmentedImages/'+img_path2,Color_Masked)
        segs.append(Color_Masked)
 return np.vstack(Color_Masked)

Этот код работает, когда я пробую его для одного изображения и одной маски (без папок и петель).

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

Я не могу сегментировать каждое отдельное изображение без зацикливания, потому что у меня более 500 изображений и их масок.

Я не знаю, что я пропускаю или неправильно размещаю в этом кодеи как я могу это исправить?Кроме того, есть ли более простой способ получить сегментированные изображения?

1 Ответ

0 голосов
/ 21 октября 2018

Если я не понял неправильно, вам просто нужно что-то вроде этого:

import glob

filelist = glob.glob('C:/Users/mab/Desktop/images/*.png') 
for i in filelist:
    mask = i.replace("images","masks")
    print(i,mask)

На моем iMac такие вещи производят:

/Users/mark/StackOverflow/images/b.png /Users/mark/StackOverflow/masks/b.png
/Users/mark/StackOverflow/images/a.png /Users/mark/StackOverflow/masks/a.png
...