Как создать маску изображений из набора данных COCO? - PullRequest
0 голосов
/ 11 июня 2018

Так что я использовал этот код.Я пытаюсь создать исходную маску изображений из набора данных COCO.

dataDir='G:'
dataType='train2014'
annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)


coco=COCO(annFile)
annFile = '{}/annotations/person_keypoints_{}.json'.format(dataDir,dataType)
coco_kps=COCO(annFile)


catIds = coco.getCatIds(catNms=['person'])
imgIds = coco.getImgIds(catIds=catIds );
imgIds = coco.getImgIds(imgIds = imgIds[0])
img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]
I = io.imread('G:/train2014/'+img['file_name'])

plt.imshow(I); plt.axis('off')
annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
anns = coco.loadAnns(annIds)
coco.showAnns(anns)

Но я получаю нечто вроде этого

enter image description here

Но я хочу что-то вроде этого

enter image description here

Как мне получить необработанную маску для каждого изображения?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Следуя интуиции мистера Филиппо, я смог написать правильный код, который выглядит примерно так.

mask = coco.annToMask(anns[0])
for i in range(len(anns)):
    mask += coco.annToMask(anns[i])

plt.imshow(mask)
0 голосов
/ 12 июня 2018

Не знаком с COCO, но я вижу, что есть функция annToMask, которая должна генерировать двоичную маску для каждой аннотации.

Таким образом, в непроверенном псевдошумном коде при условии, что маски не перекрываются, вы должны иметь что-то вроде:

annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)

mask = np.zeros_like(img)
for i, ann in enumerate(annIds):
    mask += coco.annToMask(ann) * i 
...