当前位置: 首页 > news >正文

基于无人机影像的可见光单木分割数据集-json格式

基于无人机影像的可见光单木分割数据集,共1700张影像,数据集大小3.6GB,分割标注采用标准json格式。

该数据集是一个专门用于基于无人机可见光影像进行单木分割的数据集,旨在帮助研究人员和开发者训练和评估基于深度学习的图像分割模型。数据集中的图像涵盖了多种环境下的森林场景,包括不同树种、密度和生长阶段的树木。每张图像都经过详细的像素级标注,适用于单木识别、计数以及森林资源管理等应用。

数据规模
  • 总样本数量:1700张可见光影像
  • 数据量:约3.6GB
  • 分辨率:具体的分辨率可能因无人机拍摄高度而异,但均为高分辨率图像,以确保树木细节清晰。
  • 标注目标:所有图像都带有详细的像素级标注信息,采用标准JSON格式进行标注,适用于训练和验证图像分割模型。
目标类别及数量

数据集中包含以下目标类别:

  • 单木 (Individual Trees): 每棵树都被单独标注,具体实例数量未提供,但可以假设每张图像中有多棵树木。
图像特性
  • 高分辨率可见光影像:图像由无人机拍摄,具有较高的空间分辨率,确保了树木细节的清晰度。
  • 多样化的森林环境:覆盖了不同地理位置、树种、密度和生长阶段的森林场景。
  • 丰富的背景信息:图像中包含了复杂的自然背景,如草地、灌木丛和其他植被,增加了分割任务的难度。
标注格式

数据集中的标注信息采用了标准的JSON格式文件。每个图像都有一个对应的标签文件,记录了每个单木的像素级掩码(mask)信息。这种格式可以直接用于多种图像分割框架,如U-Net、Mask R-CNN等。

数据集结构

典型的数据集目录结构如下:

 

深色版本

1drone_visible_tree_segmentation_dataset/
2├── images/
3│   ├── img_00001.jpg
4│   ├── img_00002.jpg
5│   └── ...
6├── annotations/
7│   ├── img_00001.json
8│   ├── img_00002.json
9│   └── ...
10└── README.md  # 数据集说明文件
应用场景

该数据集可以用于以下应用场景:

  • 森林资源管理:通过无人机影像进行树木计数、种类识别和健康状况评估,辅助森林资源管理和保护。
  • 精准林业:帮助林场管理者优化种植策略,提高森林覆盖率和生态效益。
  • 智能监控系统:辅助智能监控系统,在各种复杂环境中进行树木检测和分割。
  • 科研分析:用于研究图像分割算法和技术的发展趋势,特别是在无人机可见光影像中的应用。

示例代码

以下是一个使用Python和相关库(如OpenCV、PIL等)来加载和展示数据集的简单示例代码:

 

python

深色版本

1import os
2import cv2
3import numpy as np
4from PIL import Image
5import json
6
7# 数据集路径
8dataset_path = 'path/to/drone_visible_tree_segmentation_dataset/'
9
10# 加载图像和标注
11def load_image_and_mask(image_path, annotation_path):
12    # 读取图像
13    image = Image.open(image_path).convert('RGB')
14    
15    # 解析JSON标注文件
16    with open(annotation_path, 'r') as infile:
17        annotation = json.load(infile)
18        masks = []
19        for obj in annotation['objects']:
20            mask = np.array(obj['mask'], dtype=np.uint8)  # 假设mask是以二维数组形式存储
21            masks.append(mask)
22    return image, masks
23
24# 展示图像和掩码
25def show_image_with_masks(image, masks):
26    img = np.array(image)
27    for mask in masks:
28        # 将掩码转换为彩色图层
29        colored_mask = np.zeros_like(img)
30        colored_mask[mask > 0] = [0, 255, 0]
31        
32        # 叠加掩码到原图
33        img = cv2.addWeighted(img, 1, colored_mask, 0.5, 0)
34    
35    cv2.imshow('Image with Masks', img)
36    cv2.waitKey(0)
37    cv2.destroyAllWindows()
38
39# 主函数
40if __name__ == "__main__":
41    images_dir = os.path.join(dataset_path, 'images')
42    annotations_dir = os.path.join(dataset_path, 'annotations')
43    
44    # 获取图像列表
45    image_files = [f for f in os.listdir(images_dir) if f.endswith('.jpg')]
46    
47    # 随机选择一张图像
48    selected_image = np.random.choice(image_files)
49    image_path = os.path.join(images_dir, selected_image)
50    annotation_path = os.path.join(annotations_dir, selected_image.replace('.jpg', '.json'))
51    
52    # 加载图像和标注
53    image, masks = load_image_and_mask(image_path, annotation_path)
54    
55    # 展示带有掩码的图像
56    show_image_with_masks(image, masks)

这段代码展示了如何加载图像和其对应的JSON标注文件,并在图像上绘制像素级掩码。您可以根据实际需求进一步扩展和修改这段代码,以适应您的具体应用场景。

示例代码:使用预训练模型进行推理

以下是使用预训练模型进行推理的示例代码。这里我们假设您使用的是基于U-Net的模型,但您可以根据需要选择其他支持像素级分割的模型。

 

python

深色版本

1import torch
2import torchvision
3import segmentation_models_pytorch as smp
4import cv2
5import numpy as np
6from PIL import Image
7import json
8
9# 数据集路径
10dataset_path = 'path/to/drone_visible_tree_segmentation_dataset/'
11subset = 'test'  # 可以选择 'train' 或 'val'
12
13# 加载预训练模型
14model = smp.Unet(
15    encoder_name='resnet34',
16    encoder_weights='imagenet',
17    in_channels=3,
18    classes=2  # 背景 + 单木
19)
20weights_path = 'path/to/pretrained/unet_weights.pth'  # 替换成实际的预训练模型路径
21model.load_state_dict(torch.load(weights_path))
22model.eval()
23
24# 主函数
25if __name__ == "__main__":
26    images_dir = os.path.join(dataset_path, 'images')
27    set_file = os.path.join(dataset_path, 'annotations', f'{subset}.txt')
28    
29    # 获取图像列表
30    with open(set_file, 'r') as f:
31        image_files = [line.strip() + '.jpg' for line in f.readlines()]
32    
33    # 随机选择一张图像
34    selected_image = np.random.choice(image_files)
35    image_path = os.path.join(images_dir, selected_image)
36    
37    # 读取并预处理图像
38    image = Image.open(image_path).convert('RGB')
39    transform = torchvision.transforms.Compose([
40        torchvision.transforms.ToTensor(),
41        torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
42    ])
43    image_tensor = transform(image).unsqueeze(0)
44    
45    # 使用预训练模型进行推理
46    with torch.no_grad():
47        predictions = model(image_tensor)
48    
49    # 处理预测结果
50    pred_mask = predictions.squeeze().cpu().numpy()
51    pred_mask = (pred_mask > 0.5).astype(np.uint8)  # 二值化掩码
52    
53    # 在图像上绘制掩码
54    img = np.array(image)
55    colored_mask = np.zeros_like(img)
56    colored_mask[pred_mask == 1] = [0, 255, 0]
57    img = cv2.addWeighted(img, 1, colored_mask, 0.5, 0)
58    
59    # 显示结果
60    cv2.imshow('Image with Mask', img)
61    cv2.waitKey(0)
62    cv2.destroyAllWindows()

这段代码展示了如何使用预训练的U-Net模型进行推理,并显示和保存推理结果。您可以根据实际需求进一步扩展和修改这段代码,以适应您的具体应用场景

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [Python]二、Python基础数据科学库(1)
  • 2024最新!!!iOS高级面试题,全!(二)
  • Golang | Leetcode Golang题解之第416题分割等和子集
  • Linux系统(Ubuntu)(下载篇)
  • C++11标准模板(STL)- 常用数学函数 - 计算e的给定幂 (ex)(std::exp, std::expf, std::expl)
  • 【Oracle】ORA-02292: integrity constraint
  • Qt clicked()、clicked(bool)、toggled(bool)信号的区别和联系
  • 基于C语言的基数排序算法
  • 如何安装1Panel面板并架设一个静态网站
  • 【ChatGPT】提示词助力高效文献处理、公文撰写、会议纪要与视频总结
  • 深度学习——基础知识
  • Android carrier_list.textpb 和apns-conf.xml 配置文件参考
  • 数据结构--第六章图
  • Redis 缓存雪崩、缓存穿透、缓存击穿详解
  • 2024年中国研究生数学建模竞赛C题——解题思路
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2017前端实习生面试总结
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ERLANG 网工修炼笔记 ---- UDP
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • java正则表式的使用
  • JAVA之继承和多态
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • leetcode98. Validate Binary Search Tree
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • nodejs实现webservice问题总结
  • October CMS - 快速入门 9 Images And Galleries
  • socket.io+express实现聊天室的思考(三)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 双管齐下,VMware的容器新战略
  • 小程序button引导用户授权
  • 转载:[译] 内容加速黑科技趣谈
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Android开发者必备:推荐一款助力开发的开源APP
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ‌JavaScript 数据类型转换
  • (1)虚拟机的安装与使用,linux系统安装
  • (c语言+数据结构链表)项目:贪吃蛇
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (SpringBoot)第七章:SpringBoot日志文件
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)hibernate配置管理
  • (计算机网络)物理层
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET连接数据库方式
  • .Net中ListT 泛型转成DataTable、DataSet
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually