NYUDv2数据集预处理——获得语义分割的图像和标签并着色

NYU Depth Dataset V2数据集的读取 NYUD V2数据集下载网址如下: https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html V1和V2的区别: 阅读详情
AI摘要

该博客介绍了如何处理NYUDv2数据集,包括从RGB-D图像中提取RGB图像,进行灰度分割,并对分割图像进行着色。通过预处理脚本,将数据集划分为训练集和验证集,同时提供了对分割图像进行颜色标注的方法。最后,文章还展示了如何按照训练集和验证集的txt文件划分原始图像和分割图像。

NYUDv2数据集

  • NYUDv2数据集包含RGB、RGB-D图像,共有849类。
  • 本文只使用NYUDv2数据集中的RGB图像,且只包含40类。
  • 只需下载Labeled dataset (~2.8 GB)

本文内容

  • 获得NYUDv2数据集中的RGB原始图像、灰度分割图像
  • 对灰度分割图像进行着色
  • 将原始图像和分割图像划分为训练集和验证集

完整代码和数据集已上传至百度网盘,链接如下:

链接:https://pan.baidu.com/s/17rY8n9EStN9VggClz75svg 
提取码:76s1

在这里插入图片描述

获得原始图像和分割图像

  • 运行preprocess.py,输出原始图像和分割图像,并且能够输出划分训练集和验证集的txt文件
## preprocess.py

import os
import h5py
import numpy as np
from PIL import Image
from tqdm import tqdm
from scipy.io import loadmat

def write_txt(f, list_ids):
    f.write('\n'.join(list_ids))
    f.close()

def extract_data(root):
    """
    extract images and labels.
    :param root:
    :return:
    """
    print('Extracting images and labels from nyu_depth_v2_labeled.mat...')
    data = h5py.File(os.path.join(root, 'nyu_depth_v2_labeled.mat'))
    images = np.array(data['images'])
    print(f'images shape: {images.shape}')
    num_img = images.shape[0]
    print(f'image number: {num_img}')

    images_dir = os.path.join(root, 'images')
    if not os.path.isdir(images_dir):
        os.makedirs(images_dir)

    bar = tqdm(range(num_img))
    for i in bar:
        img = images[i]
        r = Image.fromarray(img[0]).convert('L')
        g = Image.fromarray(img[1]).convert('L')
        b = Image.fromarray(img[2]).convert('L')
        img = Image.merge('RGB', (r, g, b))
        img = img.transpose(Image.ROTATE_270)
        img.save(os.path.join(images_dir, str(i) + '.jpg'), optimize=True)

def split(root):
    print('Generating training and validation split from split.mat...')
    split_file = loadmat(os.path.join(root, 'splits.mat'))
    train_images = tuple([int(x) for x in split_file["trainNdxs"]])
    test_images = tuple([int(x) for x in split_file["testNdxs"]])
    print("%d training images" % len(train_images))
    print("%d test images" % len(test_images))

    train_ids = [str(i - 1) for i in train_images]
    test_ids = [str(i - 1) for i in test_images]

    train_list_file = open(os.path.join(root, 'train.txt'), 'a')
    write_txt(train_list_file, train_ids)

    test_list_file = open(os.path.join(root, 'val.txt'), 'a')
    write_txt(test_list_file, test_ids)


def labels_40(root):
    print('Extracting labels with 40 classes from labels40.mat...')
    data = loadmat(os.path.join(root, 'labels40.mat'))
    labels = np.array(data['labels40'])
    print(f'labels shape: {labels.shape}')

    path_converted = os.path.join(root, 'labels40')
    if not os.path.isdir(path_converted):
        os.makedirs(path_converted)

    bar = tqdm(range(labels.shape[2]))
    for i in bar:
        label = np.array(labels[:, :, i].transpose((1, 0)))
        label_img = Image.fromarray(np.uint8(label))
        label_img = label_img.transpose(Image.ROTATE_270)
        label_img.save(os.path.join(path_converted, str(i) + '.png'), optimize=True)


def main():
    root = os.path.dirname(__file__)
    extract_data(root)
    split(root)
    labels_40(root)


if __name__ == '__main__':
    main()
  • 在生成的images文件夹中存放着原始图像,共1449张,如下图所示:
    在这里插入图片描述

  • 在生成的labels40文件夹中存放着40分类的分割图像,共1449张,如下图所示:
    在这里插入图片描述

  • 生成的train.txt和val.txt中存放训练集和验证集的划分,其中训练集795张,验证集654张

分割图像着色

  • 在根目录下新建一个文件夹out_color40,然后运行main.py,即可对分割图像着色,如下图所示:
## main.py

import os
import cv2
import numpy as np

import rgb2gray2rgb
import label2color

def label_color_label(img_path, color_map):
    src_label = cv2.imread(img_path, cv2.IMREAD_UNCHANGED)

    # resize
    # src_label = cv2.resize(img, (256, 256))
    '''

    label2color
    '''
    color_img = rgb2gray2rgb.gray2color(src_label, color_map)
    #save
    dir, name = os.path.split(img_path)
    save_path=os.path.join('./out_color40', name)
    cv2.imwrite(save_path, color_img)

    '''
    color2label
    '''
    gray_img = rgb2gray2rgb.color2gray(color_img, color_map)

    '''
        原始lable图像的灰度值
        lable2color2label图像的灰度值,
    
    '''
    pix_value = np.unique(src_label)
    print('src_label_value', pix_value)
    pix_value = np.unique(gray_img)
    print("color2label_value", pix_value)



if __name__ == '__main__':

    img_dir = './labels40/'

    n_label = 41 # the  number of label class

    color_map1 = label2color.label_colormap(n_label=n_label, rgb1_bgr0=0)

    '''
    random gene color map
    '''
    random_state = np.random.RandomState(seed=1234)
    color_custom_map = np.random.randint(low=0, high=255, size=(n_label, 3), dtype=np.uint8)

    for img in sorted(os.listdir(img_dir)):

        if not img.endswith((".png", ".jpg")):
            continue

        img_path = os.path.join(img_dir, img)
        label_color_label(img_path, color_map1)

在这里插入图片描述

划分训练集和验证集

  • 运行splits_trainval.py,按照train.txt和val.txt的内容,将原始图像和分割图像划分为训练集和验证集
## splits_trainval.py

import shutil
import os


def objFileName():
    local_file_name_list = "val.txt"
    obj_name_list = []
    for i in open(local_file_name_list, 'r'):
        obj_name_list.append(i.replace('\n', ''))
    return obj_name_list


def copy_img():
    local_img_name = "out_color40"
    # 指定要复制的图片路径
    path = "dataset/Segmentation/val"
    # 指定存放图片的目录
    for i in objFileName():
        new_obj_name = i + '.png'
        # 对于分割数据,数据是jpg格式,标签是png格式
        print(new_obj_name)
        shutil.copy(local_img_name + '/' + new_obj_name, path + '/' + new_obj_name)


if __name__ == '__main__':
    copy_img()
  • 需要注意,原始图像的格式是.jpg,分割图像的格式是.png,在运行代码时需要根据图片格式进行修改
    在这里插入图片描述
NYU-Depth数据集 数据集包含以下几个部分: 有标签的:视频数据的一个子集,伴随着密集多标签。此数据也已经被预处理,以填补缺少的深度标签。 原始数据集:利用Kinect测得的原始的RGB、Depth、加速度数据。 工具箱:用于操作数据和标签的有用的工具。 用于评估的训练和测试部分。 有标签的数据集有标签的数据集是原始数据集的子集。它是由成对的RGB和深度帧同步组成的,并且每个图像都有多个标签。除了加上标签的深度地图之外 阅读详情

相关推荐

NYU Depth Dataset V2数据集的预处理与可视化实践

本文详细介绍了NYU Depth Dataset V2数据集的预处理与可视化实践,包括数据获取、环境配置、格式转换及可视化方法。通过Python代码示例展示了如何高效处理RGB图像、深度图和语义标签,并提供了数据增强、批量处理及常见问题解决方案,助力计算机视觉任务开发。

weixin_30664051的博客 602

图像处理基本库的学习笔记5--公共数据集,PASCAL VOC数据集,NYUD V2数据集的简介与提取,COCO2017,医学影像数据集汇总

公共数据集 《基于全卷积神经网络的图像分割算法的研究及应用》 实验数据:本章节的公共数据集来源自计算机视觉领域的 PASCAL VOC 2012、NYUDv2、PASCAL CONTEXT,医学数据集来自法国 IRCAD 国际医疗中心数据库中的肝脏 CT 扫描图像。 本节按照 4:1 的比例将两个数据集分别划分成训练和测试两部分。在算法中,就会使用训练那部分完成算法网络模型的构建,在训练的过程中,...

7700

NYU Depth V2数据集深度解析:从MATLAB到Python的迁移指南(避坑版)

本文深度解析了NYU Depth V2数据集,并提供了从MATLAB迁移到Python的完整避坑指南。针对该数据集经典的`.mat`格式,详细讲解了使用`h5py`库正确读取数据、校正维度、解析标签及可视化深度图的核心方法,帮助开发者高效构建用于室内场景理解、深度估计等任务的Python数据加载管道。

weixin_29098367的博客 82

NYUD V2数据集的简介与提取

声明:基于python3.6提取NYUD V2数据集 NYUD V2数据集下载网址如下: https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html(文中在Toolbox中提供了常用的预处理图像函数) 下载好的数据集的文件名是nyu_depth_v2_labeled.mat,可以用matlab打开。 NYUD V2数据集由1449张64...

jiao_mrswang的博客 1万+

NYU-V2数据集预处理

我下载的是带标签的NYUV2数据集,下载写来的格式是.mat 原图,深度图,labels的提取方式参考此博客 提取各类名称保存为txt # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt import scipy.io as sio import h5py import os from PIL imp...

chutongz的博客 5613

matlabkinect代码-NYUd2-Toolkit:为单目深度估计任务处理NYUdv2数据集的工具和技巧

matlab kinect 代码NYUd2 工具包 在这里,我们为 NYUd v2 数据集提供了简单的预处理工具,因为 NYUd v2 数据集的作者仅提供 Kinect 收集的原始转储数据。 当我们在 NYU-d v2 数据集上应用单目深度估计时,我们应该自己生成RGB图像和密集深度图,过程方法如下。 要求 这些代码在 Ubuntu 16.04 LTS 和 MATLAB 2015b 和 Python2.7 上进行了测试。 数据集准备 下载400G以上的原始数据,请确保您有足够的可用磁盘空间。 然后将它们解压到目录nyud_raw_data 。 同时,从上面相同的 url 下载Toolbox ,并解压。 数据集分为590文件夹,对应于每个正在拍摄的scene ,例如living_room_0012 。 该文件的结构如下: / ../bedroom_0001/ ../bedroom_0001/a-1294886363.011060-3164794231.dump ../bedroom_0001/a-1294886363.016801-3164794231.dump ... ../bedro

NYUDv2数据集预处理,转化为HHA

参考。

weixin_51473106的博客 1300

NYUV2数据集的预处理及类别名txt

NYUV2数据集的预处理,包括提取原RGB图, 深度图,labels以及类别名的txt文件(已生成,可直接用)

深度学习领域语义分割常用数据集:PASCAL VOC 2007 ,2012 NYUDv2 SUNRGBD CityScapes CamVid SIFT-Flow 7大数据集介绍

深度学习领域语义分割常用数据集:PASCAL VOC 2007 ,2012 NYUDv2 SUNRGBD CityScapes CamVid SIFT-Flow 7大数据集介绍

Keep_Trying_Go的博客 5996

SWAT模型非点源模拟原理

目录引言模型概述非点源污染模拟原理物质迁移内容过程营养物农药病原菌运移河道水质模型营养元素的地表水体循环河道水质模拟藻类模拟氮元素磷元素生化需氧量及溶解氧重金属的运移蓄水体水质模拟 引言 今天无意接触到这一块,就记录下来了。 模型概述 1、流域中非点源污染的来源主要是农业化肥和农药的施用。 2、氮、磷等营养物和农药的迁移和转化取决于化合物在土壤环境中经历的转化过程。 3、SWAT模型可以模拟水文相应单元内氮、磷完整的营养物循环过程和任何一种农药的降解过程。 4、SWAT模拟流域内泥沙、藻类、溶解氧、有机污染

DoWayChan的博客 4878

JAVA进阶面试题:如何设计一个高并发系统?

如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了。为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先。 如果你确实有真才实学,在互联网公司里干过高并发系统,那你确实拿 offer 基本如探囊取物,没啥问题。面试官也绝对不会这样来问你,否则他就是蠢。 假设你在某知名电商公司干过高并发系统,用户上亿,一天流量几十亿,高峰期并发量上万,甚至是十万。那么人家一定会仔细盘问你的系统架构,你们系统啥架构?怎么部署的?部署了多少台机器

uuop155的博客 1019

NYUv2数据集的使用

另外,从Kinect设备得来的深度非线性已经被移除,每个深度图像的值都以米为单位。虽然帧不同步,但每个RGB,深度和加速度计文件的时间戳都包含在每个文件名中,并且可以使用Toolbox中的。- 绘制深度图的HxWxN矩阵,其中H和W分别为高度和宽度,N为图像数目,深度元素的值单位为米。- RGB图像的HxWx3xN矩阵,其中H和W分别是高度和宽度,N是图像的数量。- 用于标记数据集中的每个深度图像的文件名(在Raw数据集中)的Nx1单元数组。以前缀r和d开头的文件分别是来自RGB和深度相机的帧。

qq_43772102的博客 4872

想重装OpenClaw?先执行这4步彻底卸载,避免配置冲突

在重装OpenClaw之前,彻底卸载是非常重要的一步。如果不彻底卸载,可能会导致: - 残留的配置文件与新安装的版本冲突 - 旧的依赖包干扰新的安装过程 - 服务冲突导致启动失败 - 数据混乱影响系统稳定性

一键难忘的博客 1043

NYU Depth V2数据集相关介绍

NYU Depth V2数据集相关介绍

IT菜鸟 9146

GPS系统跟踪捕获算法的Verilog实现在FPGA

本文将介绍GPS系统中的跟踪捕获算法,并提供该算法的Verilog实现在FPGA上运行的源代码。常用的方法是将接收到的信号与一个本地振荡器产生的参考信号进行混频,然后使用带通滤波器提取出希望得到的频率分量。码跟踪的目的是通过检测接收到的信号中的码片序列来实现对导航数据的解调。以上是一个简化的GPS系统跟踪捕获算法的Verilog实现,其中包含了时间检测、频率跟踪和码跟踪三个模块。GPS信号由载波频率和导航数据组成。跟踪捕获算法的目标是通过对接收到的信号进行处理,从而获取到准确的载波频率和导航数据。

PixelEnigma的博客 1108

芒果YOLOv7改进48:主干篇:独家首发改进:目标检测新范式骨干PPHGNetv2改进版,充分融合信息特征,提升YOLOv7检测能力

YOLOv7代码改进实践 | 独家首发改进 PPHGNetv2 改进版结构

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1849

【数据集】——NYU Depth Dataset V2简介

简介: NYU-Depth V2数据集由微软Kinect的RGB和Depth摄像机记录的各种室内场景的视频序列组成。它的特点: 1449张标注的RGB图片和深度图 来自3个城市,464个场景 407024张没有标注的图片 每个对象都有一个类和一个实例号(cup1、cup2、cup3等),像实例分割 数据集有几个部分: 标签:视频数据的一个子集,带有密集的多类标签。这些数据也经过预处理,以填补缺失的深度标签。 Raw: Kinect提供的原始rgb、深度和加速度计数据。 工具箱:用于操作数据和标签的有用函

怡宝2号 1万+

20.Labview使用子vi进行VI间的数据传递详解(模块化)

子VI(模块化)题主在题注中也提到, 子VI的建立只是为了减少程序的负担,那么我们当使用子VI的时候首先就要明确什么是子VI?什么样的程序可以作为子VI?首先我们来看NI官方给的定义,具体说明如下图所示:题主已经将重点画出来了,在官方的解释中将子VI定义为了模块化,大家可以看到创建模块化子VI的特点在于减少代码重复工作优化了程序的框架结构。把一个代码打包,需要的时候就拎出来让他处理处理,不需要的时候就让它躺在我的列表里就行了也不占用运行空间。那么创建子VI需要需要注意以下几点:①任何一个程序。

关注我,更多技术问题欢迎私聊~ 3516

Nyudv2深度图像转HHA图像

Nyudv2深度图像处理

qq_51745206的博客 1020

Python从0到100(二):Python语言介绍及第一个Pyhon程序

Python从0到100(二):Python语言介绍及第一个Pyhon程序。与C和Java比,Python的学习成本和难度曲线不是低一点,更适合新手入门,自底向上的技术攀爬路线。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 5440

SDR 和 DDR 的区别

SDR 和 DDR 的差别,最明显提现在传输速率和频率上。DDR SDRAM与SDRAM的基本结构是相似的,最根本的区别在于DDR 支持在一个时钟周期内传输两次数据,,SDR 只能传输一次数据。

串起点滴 1960

如何将NYUDv2数据集标签从894类转换为40类(NYUDv2-40)或者13类?

将NYUDv2数据集从894类转换为40类(NYUDv2-40)或者13类 在使用NYUDv2数据集进行语义分割的时候会发现,从官网直接下载的数据集有894类,而发现在许多论文中描述的是40类,有的也称作nyudv2-40;一些研究中也出现了13类的标签。 可参考:https://github.com/ankurhanda/nyuv2-meta-data 这里给出了40分类的label数据集:la...

球场恶汉的博客 5523

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【论文阅读】(边缘检测相关)HED:Holistically-Nested Edge Detection

论文地址:https://arxiv.org/pdf/1504.06375.pdf Holistically:整体 Nested:嵌套的 主要解决两个问题: 基于整个图像的训练和预测; 多尺度和多水平的特征学习。 该算法通过深度学习模型,完成了从图像到图像的预测,并通过学习到的丰富的分级特征,完成边缘检测中的细节问题。 摘要 本文提出了一种新的边缘检测算法,解决了长期存在的视觉问题中的两个重要问题:(1)整体图像的训练和预测;(2)多尺度、多层次特征学习。我们提出的方法,整...

dujuancao11的博客 8721

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Pytorch语义分割网络的详细训练过程——以NYUv2数据集为例

本文详细讲解了使用Pytorch框架训练语义分割网络的四步过程,并以NYUv2数据集为例展示了全部代码

python_plus的博客 2794

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

下载nyuv2数据集

1、下载nyuv2数据集 cd PATH_TO_DOWNLOAD wget http://datasets.lids.mit.edu/sparse-to-dense/data/nyudepthv2.tar.gz tar -xvf nyudepthv2.tar.gz

luosnongning的博客 4478
上一篇: 基于Sobel算子的图像边缘检测
下一篇: 阅读笔记1-深度学习与计算机视觉
晓shuo
晓shuo 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄6年 4万+粉丝 113原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值