NYU Depth Dataset V2数据集的读取

NYUD V2数据集下载网址如下:

https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html 

1.关于V1和V2的区别:

NYU Depth Dataset V2数据集的读取_第1张图片

NYU Depth Dataset V2数据集的读取_第2张图片

对比可以看到V2有  464个不同的室内场景数(V1 64个)

                                26个场景类型(V1 7个)

                                407,024张没有标注的图片(V1 108,617个)

                               1449个密集标记的RGB和深度图像对(V1 2347个,比V2多

                               提供实例和对象标签(V1不提供)

V1和V2都有:      1000+的类

                             已修复的和原始深度图

2.V2数据:

下载好的数据集的文件名是nyu_depth_v2_labeled.mat

可以matlab打开

NYU Depth Dataset V2数据集的读取_第3张图片

accelData-采用Nx4的加速度计值矩阵,当每帧都被取走。这些列包括设备的滚动、偏航、俯仰和倾斜角度。

depths-HxWxN维度的矩阵深度图,其中H和W分别为高度和宽度,N为图像的个数。深度元素的值是米。

images-HxWx3xN RGB图像矩阵,其中H和W分别是高度和宽度,N是图像的数量

labels-HxWxN标签矩阵,其中H和W分别是高度和宽度,N是图像数量。 标签范围从1…C,其中C是类的总数。 标签的范围从1…C是类的总数。如果一个像素的标签值为0,那么这个像素就没有标记。

names-每个类的英文名称的Cx1单元格数组

namesTolds-从英文标签名称到ID(使用C键值对)

rawDepths-HxWxN深度图矩阵,其中H和W分别是高度和宽度,N是图像数量。 这些深度图是kinect的原始输出

scenes-每个图像拍摄场景名称的Cx1单元阵列

 

3.python代码读取数据:

#提取原图

import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio
import h5py
import os 
f=h5py.File("nyu_depth_v2_labeled.mat")
images=f["images"]
images=np.array(images)
 
path_converted='./nyu_images'
if not os.path.isdir(path_converted):
    os.makedirs(path_converted)
 
from PIL import Image
images_number=[]
for i in range(len(images)):
    images_number.append(images[i])
    a=np.array(images_number[i])
    r = Image.fromarray(a[0]).convert('L')
    g = Image.fromarray(a[1]).convert('L')
    b = Image.fromarray(a[2]).convert('L')
    img = Image.merge("RGB", (r, g, b))
    img = img.transpose(Image.ROTATE_270)
    iconpath='./nyu_images/'+str(i)+'.jpg'
    img.save(iconpath,optimize=True)

#提取修复后的深度图

import numpy as np
import h5py
import os
from PIL import Image
 
f=h5py.File("nyu_depth_v2_labeled.mat")
depths=f["depths"]
depths=np.array(depths)
 
path_converted='./nyu_depths/'
if not os.path.isdir(path_converted):
    os.makedirs(path_converted)
 
max = depths.max()
print(depths.shape)
print(depths.max())
print(depths.min())
 
depths = depths / max * 255
depths = depths.transpose((0,2,1))
 
print(depths.max())
print(depths.min())
 
for i in range(len(depths)):
    print(str(i) + '.png')
    depths_img= Image.fromarray(np.uint8(depths[i]))
    depths_img = depths_img.transpose(Image.FLIP_LEFT_RIGHT)
    iconpath=path_converted + str(i)+'.png'
    depths_img.save(iconpath, 'PNG', optimize=True)

#同样方法可以提取rawdepth 对比查看深度图修复效果

#提取labels

import numpy as np
import h5py
import os
from PIL import Image
 
f=h5py.File("nyu_depth_v2_labeled.mat")
labels=f["labels"]
labels=np.array(labels)
 
path_converted='./nyu_labels/'
if not os.path.isdir(path_converted):
    os.makedirs(path_converted)
 
labels_number = []
for i in range(len(labels)):
    labels_number.append(labels[i])
    labels_0 = np.array(labels_number[i])
    label_img = Image.fromarray(np.uint8(labels_number[i]))
    label_img = label_img.transpose(Image.ROTATE_270)
 
    iconpath = './nyu_labels/' + str(i) + '.png'
    label_img.save(iconpath, 'PNG', optimize=True)

#语义分割图片 识别出了图片中的每个物体

#查看names

import h5py

f=h5py.File("./nyu_depth_v2_labeled.mat")

ft = open('names.txt', 'w+')
print(f["names"].shape) #打印查看类别个数,共894类
for j in range (894):
    name = f["names"][0][j]
    obj = f[name]
    strr = "".join(chr(i) for i in obj[:])
    ft.write(strr + '\n')

ft.close()

 

 NYU Depth Dataset V2数据集的读取_第4张图片     NYU Depth Dataset V2数据集的读取_第5张图片

                    图1 image                                                    图2 labels

NYU Depth Dataset V2数据集的读取_第6张图片     NYU Depth Dataset V2数据集的读取_第7张图片

                   图3 rawdepth                                                图4 depth

4.存疑

数据集下载地址还提供下载Rawdata和他的Toolbox,接下来的学习重点放在toolbox上

rawdepth是如何变化为depth?

数据集网站显示的depth为彩色图,自己提取到的是黑白图,三通道和单通道?
 

 

 

你可能感兴趣的:(单目深度估计,深度学习,NYU)