【数据处理】COCO 数据集掩码 Run-Length Encoding (RLE) 编码转二进制掩码

输入:结果.json
输出:mask.jpg
json内容示例如下:

{
	"labels":[ # class_id 
		1,
		2,
		3,
		...
	],
	"scores":[ # 置信度
 		0.2,
 		0.7,
 		0.3,
 		...
	],
	"bboxes":[
        [
            1244.0,
            161.0,
            1335.0,
            178.0
        ],
        [
            1243.0,
            161.0,
            1336.0,
            178.0
        ],
        [
            1242.0,
            160.0,
            1336.0,
            179.0
        ],
        ...
	],
	   "masks": [ # Run-Length Encoding (RLE) 编码格式的掩码
        {
            "size": [
                1024,
                1536
            ],
            "counts": "]UlV15eo06M3O1O100O1000KcPOG]o09dPOF\\o0:dPOF\\o0:dPOF\\o0:dPOF\\o0:cPOG]o0:bPOF^o0:bPOF^o0>0000000000000000000000000O100000000000000O100IaPOM_o03aPOM_o03aPOM_o02bPON^o02bPON^o02cPOM]o03cPOM]o02dPON\\o02dPON\\o02dPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03dPOK]o05cPOK]o05700000000O1O2MYP;1hoD00Ojo10WPN002N1ONPkX6"
        },
        {
            "size": [
                1024,
                1536
            ],
            "counts": "]UkV13io06K3N2N200O10000000000000000000000000000000000000000000000000O1000000000000000000O1000000IaPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOL`o04`POL`o04`POL`o04`POL`o04`POL`o04`POL`o04`POL`o04`POL`o04`POL`o04aPOJ`o06`POJ`o06aPOI_o06bPOJ^o06600O1O2N1O1O10000000000000WP21hoM00OJ0^PO0ao026002N000001LQkW6"
        },
        {
            "size": [
                1024,
                1536
            ],
            "counts": "]UjV12lo05J3M3N3N100O10000000O100000000000000000000000000000000000000000000O1000000000000000000O1000000000000000000000000O10O1000000000O1L_POIbo06_POIao06aPOI_o075O1O101N100O100000O010001NXPO0bo00^PO1ho00O1JN^PO2ao00^POOco02\\PONdo043000000O1MRkW6"
        },
}

counts 字段是 COCO 数据集中用于表示二进制掩码的 Run-Length Encoding (RLE) 编码格式。RLE 是一种无损数据压缩方法,特别适用于包含大量连续重复值的数据(如二进制掩码)。

RLE 编码格式
RLE 编码的基本思想是将连续的相同值(如 0 或 1)压缩为一个计数值。在 COCO 数据集的 RLE 编码中:

  • 编码是一个字符串,由一系列数字和符号组成。
  • 数字表示连续像素的数量。
  • 符号(如字母或特殊字符)表示像素的值(通常是 0 或 1)。

代码
Python 示例,使用 pycocotools 库将 RLE 编码转换为二进制掩码


def json2starmask(json_data):
    """
    Processes the JSON data, decoding the masks for labels == 1 and scores > 0.3.

    Args:
        json_data (dict): Loaded JSON data.
    """
    results = []

    labels=json_data['labels']
    scores=json_data['scores']
    masks=json_data['masks']
    for i,(label,score,mask) in enumerate(zip(labels,scores,masks)) :
        if label == 1 and score > 0.3: # 这边可以设置想要解吗的label和置信度分数
            binary_mask = maskUtils.decode(mask) # min=0,max=1
            results.append(binary_mask*255) # mask*255,看的更清楚~
    results = np.sum(results, axis=0) #(可选)这一步是将实例分割转为语义分割mask,
    return results
    
 json_path='/path/to/结果.json'
 with open(json_path, "r", encoding='utf-8') as jsonf:
     json_data = json.load(jsonf)
 decoded_masks = json2starmask(json_data)
 cv2.imwrite('decoded_masks.jpg',decoded_masks)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值