Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 如何转换TFRecord格式的高光谱图像或多波段图像?_Tensorflow_Image Processing_Dataset_Tfrecord - Fatal编程技术网

Tensorflow 如何转换TFRecord格式的高光谱图像或多波段图像?

Tensorflow 如何转换TFRecord格式的高光谱图像或多波段图像?,tensorflow,image-processing,dataset,tfrecord,Tensorflow,Image Processing,Dataset,Tfrecord,我一直在尝试使用.mat文件中的高光谱图像数据集。我发现,使用scipy库及其loadmat功能,我可以加载高光谱图像,并选择一些波段将其视为RGB def RGBread(image): images = loadmat(image).get('new_image') return abs(images[:,:,(12,6,4)]) def SIread(image): images = loadmat(image).get('new_

我一直在尝试使用.mat文件中的高光谱图像数据集。我发现,使用scipy库及其loadmat功能,我可以加载高光谱图像,并选择一些波段将其视为RGB

    def RGBread(image):   
      images = loadmat(image).get('new_image')
      return abs(images[:,:,(12,6,4)])
    def SIread(image):
      images = loadmat(image).get('new_image')
      return abs(images[:,:,:])
在尝试实现pix2pix体系结构之后,我发现了一个意外错误。当负责加载数据(仍然是.mat文件)的函数传递数据集文件名列表时,Tensor Flow没有用于读取或编码的直接方法,因此我使用RGBread和SIread方法获取这些数据,然后将它们转换为张量

    def load_image(filename, augment=True): 

      inimg = tf.cast( tf.convert_to_tensor(RGBread(ImagePATH+'/'+filename)
             ,dtype=tf.float32),tf.float32)[...,:3]
      tgimg = tf.cast( tf.convert_to_tensor(SIread(ImagePATH+'/'+filename)
             ,dtype=tf.float32),tf.float32)[...,:12]

      inimg, tgimg = resize(inimg, tgimg,IMG_HEIGH,IMG_WIDTH)

      if augment:
        inimg, tgimg = random_jitter(inimg, tgimg)

      return inimg, tgimg
使用load_image方法加载图像时,使用数据集的单个.mat文件(高光谱图像)的名称和路径作为函数的参数,该方法工作得非常好

plt.imshow(load_train_image(tr_urls[1])[0])
问题始于我创建数据集张量时,因为我的RGBread函数不接收张量作为参数,因为loadmat('.mat')需要字符串。有以下错误

train_dataset = tf.data.Dataset.from_tensor_slices(tr_urls)
train_dataset = train_dataset.map(load_train_image,
                num_parallel_calls=tf.data.experimental.AUTOTUNE)

在阅读了大量关于读取.mat文件的内容后,我发现一位用户建议将数据传递到TFrecord格式。我一直想做,但做不到。有人能帮我吗?

Rasterio在这里可能有用

它可以读取hyperspectral.tif,可以使用tf.keras数据生成器将其传递给tf.data。这可能有点慢,可能应该在训练前完成,而不是在运行时


另一种方法是询问您是否需要geotiff元数据。如果没有,则可以预处理TFR记录并另存为numpy数组

光栅在这里可能很有用

它可以读取hyperspectral.tif,可以使用tf.keras数据生成器将其传递给tf.data。这可能有点慢,可能应该在训练前完成,而不是在运行时


另一种方法是询问您是否需要geotiff元数据。如果没有,则可以预处理TFR记录并另存为numpy数组

谢谢,但是我用tf.keras.Sequential解决了我的问题,这个库允许我创建一个数据生成器。谢谢,但是我用tf.keras.Sequential解决了我的问题,这个库允许我创建一个数据生成器。
TypeError: expected str, bytes or os.PathLike object, not Tensor