Segmentación de imágenes FCN | Preparación de datos

Referencia: Cómo etiquetar la máscara para el entrenamiento del modelo de segmentación de imágenes

1. Detalles del uso de la herramienta de marcado

Utilice la herramienta de anotación VIA

  1. eliminar imagen de muestra
    Inserte la descripción de la imagen aquí

  2. agregar su propia imagen
    Inserte la descripción de la imagen aquí

  3. Establezca atributos de acuerdo con diferentes tareas. No es necesario
    segmentar únicamente un objeto. Si clasifica varios objetos, consulte por separado.
    Inserte la descripción de la imagen aquí

  4. Dibujar contorno
    Inserte la descripción de la imagen aquí
    Nota: Puede presionar esc cuando desee salir del dibujo, presione enter cuando termine de dibujar y haga clic para seleccionar el contorno para ajustar la posición del nodo. Para obtener más información, consulte Help-Gettong Started.
    Inserte la descripción de la imagen aquí

  5. Guardar-
    okInserte la descripción de la imagen aquí

2. Convertir a máscara

Ejecute el siguiente código:

import os
import json
import numpy as np
import skimage.draw
import cv2

IMAGE_FOLDER = "./train/"
MASK_FOLOER = "./mask/"
PATH_ANNOTATION_JSON = 'box.json'

# 加载VIA导出的json文件
annotations = json.load(open(PATH_ANNOTATION_JSON, 'r'))
imgs = annotations["_via_img_metadata"]

for imgId in imgs:
    filename = imgs[imgId]['filename']
    regions = imgs[imgId]['regions']
    if len(regions) <= 0:
        continue

    # 取出第一个标注的类别,本例只标注了一个物件
    polygons = regions[0]['shape_attributes']

    # 图片路径
    image_path = os.path.join(IMAGE_FOLDER, filename)
    # 读出图片,目的是获取到宽高信息
    image = cv2.imread(image_path)  # image = skimage.io.imread(image_path)
    height, width = image.shape[:2]

    # 创建空的mask
    maskImage = np.zeros((height,width), dtype=np.uint8)
    countOfPoints = len(polygons['all_points_x'])
    points = [None] * countOfPoints
    for i in range(countOfPoints):
        x = int(polygons['all_points_x'][i])
        y = int(polygons['all_points_y'][i])
        points[i] = (x, y)

    contours = np.array(points)

    # 遍历图片所有坐标
    for i in range(width):
        for j in range(height):
            if cv2.pointPolygonTest(contours, (i, j), False) > 0:
                maskImage[j,i] = 1

    savePath = MASK_FOLOER + filename
    # 保存mask
    cv2.imwrite(savePath, maskImage)

Supongo que te gusta

Origin blog.csdn.net/weixin_42326479/article/details/107185379
Recomendado
Clasificación