Как преобразовать изображение HyperSpectral или изображение с множеством полос в формате TFRecord? - PullRequest
0 голосов
/ 10 февраля 2020

Я пытался использовать гиперспектральный набор данных изображений, который был в файлах .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])

Проблема началась, когда я создал свой тензор dataSet, потому что моя функция 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)
TypeError: expected str, bytes or os.PathLike object, not Tensor

Прочитав много о чтении файлов .mat, я нашел пользователя, который порекомендовал передать данные в формат TFrecord. Я пытался сделать это, но я не мог. Кто-нибудь может мне помочь?

...