FCN画像セグメンテーション|データ準備

参照:画像セグメンテーションモデルトレーニング用のマスクにラベルを付ける方法

独自のトレーニングデータを作成する

1.マーキングツールの使用の詳細

VIA注釈ツールを使用する

  1. サンプル画像を削除する
    ここに画像の説明を挿入

  2. 自分の写真を追加
    ここに画像の説明を挿入

  3. 異なるタスクに応じて属性を設定します。
    オブジェクト純粋にセグメント化する必要はありません。複数のオブジェクトを分類する場合は、個別にお問い合わせください。
    ここに画像の説明を挿入

  4. 輪郭の描画
    ここに画像の説明を挿入
    注:描画を終了する場合はescを押し、描画が終了する場合はEnterキーを押し、輪郭をクリックして選択してノードの位置を調整できます。詳細については、ヘルプ-GettongStartedを参照してください。
    ここに画像の説明を挿入

  5. 保存
    -okここに画像の説明を挿入

2.マスクに変換する

次のコードを実行します。

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)

おすすめ

転載: blog.csdn.net/weixin_42326479/article/details/107185379