binary segmentation 数据处理脚本小结

本文介绍如何将JSON文件转换为图像及对应的mask,并实现mask的二值化处理与图像裁剪。首先通过解析JSON文件内容,利用图像处理库生成对应的图像与mask;接着将生成的mask进行二值化处理以便于后续的图像分析任务;最后,通过指定坐标对图像进行裁剪,以获取关注区域。

1.首先是json2image,废话少说,看代码

import base64
import json
import os
import os.path as osp
import uuid

import imgviz
import PIL.Image
from labelme import utils

if __name__ == "__main__":

    base_dir = osp.dirname(osp.abspath(__file__))
#输出图像与mask路径
    out_dir_name = "output"
    out_dir = osp.join(base_dir, out_dir_name)
    if not osp.exists(out_dir):
        os.mkdir(out_dir)
    label_names = []
    label_file = "./label.txt"
    label_value_dict = {
   
   }
    with open(label_file) as f:
        labels = f.readlines()
        if len(labels) > 0:
            for i, item in enumerate(labels):
                item = item.strip()
                label_value_dict[item] = i
#json输入标签
    json_file_name = "json"  #'cityspaces'
    json_file_path = osp.join(base_dir, json_file_name)
    #第一张图从几开始
    new_filename = 1095
    for file_name in os.listdir(json_file_path)
### Binary Vector 的定义与数据处理中的应用 Binary vector 是一种由二进制值(0 或 1)组成的向量结构,广泛应用于数据处理和机器学习领域。在计算机科学中,binary vector 可以表示多种信息,例如布尔值、特征选择、稀疏矩阵编码等[^1]。它通常用于简化复杂数据的表示形式,同时减少存储空间需求。 #### 数据处理中的具体应用 1. **特征选择与降维** 在机器学习中,binary vector 常用于表示特征是否被选中。例如,在文本分类任务中,可以使用 binary vector 表示文档中词汇的存在与否(词袋模型)。这种方式不仅降低了维度,还提高了计算效率[^3]。 2. **稀疏矩阵表示** 稀疏矩阵是一种包含大量零值的数据结构,binary vector 能够高效地表示非零元素的位置。例如,在推荐系统中,用户-物品交互矩阵可以通过 binary vector 编码为稀疏格式,从而优化存储和计算性能[^1]。 3. **哈希编码与相似性度量** Binary vector 还可用于生成哈希码,特别是在局部敏感哈希(Locality-Sensitive Hashing, LSH)中。通过将高维数据映射到 binary vector,可以快速计算数据点之间的汉明距离,从而实现高效的近似最近邻搜索[^4]。 ```python import numpy as np # 示例:生成随机 binary vector def generate_binary_vector(length): return np.random.randint(2, size=length) binary_vec = generate_binary_vector(10) print(binary_vec) ``` #### Binary Vector 的存储与操作 由于 binary vector 的元素仅包含 0 和 1,其存储需求远低于浮点数或整数向量。在 C++ 中,可以使用 `std::vector<uint8_t>` 来存储 binary vector,其中每个 uint8_t 表示一个二进制位。此外,为了进一步优化存储,可以采用位打包技术,将多个二进制位压缩到一个字节中。 ```cpp #include <vector> #include <iostream> int main() { std::vector<uint8_t> binary_vector = {0, 1, 0, 1, 1, 0, 0, 1}; for (auto bit : binary_vector) { std::cout << bit; } return 0; } ``` #### 性能优化 在涉及大量 binary vector 操作时,移动语义可以显著提高性能。如果自定义类型未实现移动构造函数或移动赋值运算符,`std::vector` 将默认使用拷贝构造函数,这可能导致不必要的开销[^4]。因此,在设计 binary vector 的容器时,建议显式实现移动语义以优化性能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VisionX Lab

你的鼓励将是我更新的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值