hypercube

Чтение гиперспектральных данных

    Описание

    The hypercube функция читает гиперспектральные данные и возвращает hypercube объект. Объект содержит кубик гиперспектральных данных и связанные с ним свойства. Используйте функции объекта, чтобы удалить или выбрать необходимую гиперспектральную полосу, назначить новые значения пикселей, сгенерировать цветное изображение и записать гиперспектральные данные в формат файла ENVI (окружение визуализации изображений).

    Создание

    Описание

    пример

    hcube = hypercube(filename) считывает гиперспектральные данные из заданного входного файла filename. Входным файлом может быть файл национальной передачи изображений (NITF), файл Hyperion level 1R (L1R), сохраненный в иерархическом формате данных (HDF), заголовок ENVI или файл изображений или файл с расширением текста метаданных (MTL), который содержит спутниковые данные со спутников наблюдения Земли (EO).

    • EO-1 гиперион

    • EO-1 Advanced Land Imager (EO-1 ALI)

    • Мультиспектральный сканер Landsat (Landsat MSS)

    • Ландсат Тематический Mapper (Landsat TM)

    • Landsat Расширенный Тематический Mapper Plus (Landsat ETM + )

    • Landsat Operating Land Imager/Тепловой инфракрасный сканер (Landsat OLI/TIRS)

    Примечание

    The hypercube функция считывает спутниковые данные, которые хранятся в формате файла размеченных изображений (GeoTIFF).

    пример

    hcube = hypercube(img,hdr) считывает гиперспектральные данные из файла данных img. Файл данных может быть файлом изображения ENVI или файлом L1R Hyperion. Функция использует метаданные в заголовочном файле hdr интерпретировать данные из img.

    пример

    hcube = hypercube(___,wavelength) задает длину волны для каждой спектральной полосы в входных данных и устанавливает Wavelength свойство выхода hypercube объект.

    hcube = hypercube(tifFile,wavelength) считывает гиперспектральные данные из файла с изображением формата (TIFF) с тегами tifFile.

    пример

    hcube = hypercube(image,wavelength) создает hypercube объект из куба гиперспектральных данных image и заданные значения центральной длины волны wavelength.

    пример

    hcube = hypercube(image,wavelength,metadata) создает hypercube объект из куба гиперспектральных данных image, заданные значения центральной длины волны wavelengthи метаданные metadata. Можно использовать этот синтаксис для изменения Metadata свойство объекта гиперкуба.

    Примечание

    Эта функция требует библиотеки Image Processing Toolbox™ гиперспектральной визуализации. Можно установить библиотеку Image Processing Toolbox Hyperspectral Imaging Library из Add-On Explorer. Дополнительные сведения об установке дополнений см. в разделе Получение и управление Дополнений.

    Входные параметры

    расширить все

    Вход имя файла, заданное как вектор символов или строковый скаляр. Вход файла должно быть одним из следующих типов файлов.

    Формат файлаРасширенияДополнительные требования
    Файлы NITF

    .ntf

    .nsf

    Ничего
    Файлы метаданных GeoTIFF со спутников EO.txtИмя файла должно заканчиваться суффиксом «MTL».

    Файлы изображений ENVI

    Файлы заголовков ENVI

    .dat

    .hdr

    Изображение и файл заголовка должны быть в одной папке и иметь то же имя.

    Hyperion level 1R файлы изображений

    Файлы заголовков Hyperion

    .L1R

    .hdr

    Изображение и файл заголовка должны быть в одной папке и иметь то же имя.

    Типы данных: char | string

    Имя файла изображения, заданное как вектор символов или строковый скаляр. Входной файл должен быть плоским двоичным растровым файлом с .dat или .L1R расширения файлов. Двоичные данные должны быть в полосу последовательной (BSQ), полосы - перемеженной на пиксель (BIP) или полосу - перемеженной на линию (BIL) формате.

    Типы данных: char | string

    Имя файла заголовка, заданное как вектор символов или строковый скаляр. Заголовочный файл содержит метаданные для файла изображения img и имеет расширение .hdr.

    Типы данных: char | string

    Значения центральной длины волны каждой спектральной полосы, заданные как C-вектор. C - спектральная размерность, заданная как количество спектральных полос, входных гиперспектральных данных.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Имя файла TIFF, заданное как вектор символов или строковый скаляр. Имя файла должно включать расширение .tiff или .tif.

    Типы данных: char | string

    Входные гиперспектральные данные, заданные как 3-D числовой массив размера M -by- N -by- C. M и N являются количеством строк и столбцов в гиперспектральных данных, соответственно. C - количество спектральных полос в гиперспектральных данных.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Метаданные гиперспектральных данных, заданные как массив структур.

    Типы данных: struct

    Свойства

    расширить все

    Это свойство доступно только для чтения.

    Кубик гиперспектральных данных, сохраненный как 3-D числовой массив размера M -by- N -by- C. Кубик данных хранит гиперспектральные данные, считанные из файла или числового массива, как массив 2-D монохроматических изображений. C - количество изображений или спектральных полос, M и N являются пространственным разрешением изображений в пикселях. Кубик данных имеет тот же размер и тип данных, что и входные данные.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Это свойство доступно только для чтения.

    Значения центральной длины волны каждой спектральной полосы, заданные как C-вектор. C - спектральная размерность, заданная как количество спектральных полос, входных гиперспектральных данных. Вы можете задать это свойство при помощи wavelength входной параметр.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Это свойство доступно только для чтения.

    Метаданные гиперспектральных данных, сохраненные как массив структур с этими полями как значения по умолчанию.

    ОбластьОписание
    ВысотаВысота изображения или количество строк в кубе данных, заданная в виде положительного целого числа
    WidthШирина изображения или количество столбцов в кубе данных, заданная в виде положительного целого числа
    ПолосыКоличество спектральных полос, содержащих кубик данных, заданное в виде положительного целого числа
    DataType

    Тип данных, заданный как любое из следующих значений:

    • "single"

    • "double"

    • "uint8"

    • "uint16"

    • "int16"

    • "uint32"

    • "int32"

    • "uint64"

    • "int64"

    Чередование

    Перемежение данных, заданное как любое из следующих значений:

    • "bsq" - Полосно-последовательный

    • "bil" - Чередование полос по линиям

    • "bip" - Полосно-перемежающийся-на-пикселе

    HeaderOffset

    Нулевое расположение первого элемента в файле изображения, заданное в виде положительного целого числа

    Смещение заголовка представляет количество байтов от начала файла изображения до начала данных изображения. Значение по умолчанию 0.

    ByteOrderКонечность данных, заданная как строка "ieee-le" для маленького эндиана или "ieee-be" для большого эндиана.
    WavelengthUnitsМодули для длин волн спектральных полос, заданные как строка. Значение по умолчанию "Nanometers".

    Примечание

    The Metadata свойство hypercube объект может иметь одно или несколько дополнительных полей в зависимости от значений параметров, хранящихся в заголовочном файле входных гиперспектральных данных. Можно изменить значения параметров Metadata свойство или добавление новых Metadata на hypercube объект путем определения входного параметра metadata.

    Типы данных: struct

    Функции объекта

    assignDataПрисвоение новых данных кубу гиперспектральных данных
    cropDataОбласти сельскохозяйственных культур, представляющие интерес
    enviwriteЗапись гиперспектральных данных в формат файла ENVI
    selectBandsВыберите большинство информативных полос данных
    removeBandsУдалите спектральные полосы из куба данных
    colorizeОценка цветного изображения гиперспектральных данных

    Примеры

    свернуть все

    Считывайте гиперспектральные данные, хранящиеся в формате ENVI, в рабочую область. Создайте hypercube объект путем определения файла данных ENVI и связанного файла заголовка ENVI.

    hcube = hypercube('paviaU.dat','paviaU.hdr');

    Отображение свойств hypercube объект.

    hcube
    hcube = 
      hypercube with properties:
    
          DataCube: [610×340×103 double]
        Wavelength: [103×1 double]
          Metadata: [1×1 struct]
    
    

    Оцените изображение RGB из гиперспектральных данных с помощью colorize функция. Визуализация изображения RGB.

    rgbImg = colorize(hcube,'Method','RGB');
    figure
    imagesc(rgbImg)
    title('RGB Image of Data Cube')

    Смотрите метаданные hypercube объект.

    hcube.Metadata
    ans = struct with fields:
                 Filename: "Y:\jobarchive\Bspkg20b\2020_06_16_h06m34s27_job1406120_pass\matlab\toolbox\images\supportpackages\hyperspectral\hyperdata\paviaU.hdr"
              FileModDate: "25-Feb-2020 14:29:34"
                 FileSize: 654
                   Format: "HDR"
            FormatVersion: ''
               SensorType: [0×0 string]
              Description: [0×0 string]
          AcquisitionTime: [0×0 string]
             RasterFormat: "ENVI"
                   Height: 610
                    Width: 340
                    Bands: 103
                 DataType: "double"
               Interleave: "bsq"
             HeaderOffset: 0
                ByteOrder: "ieee-le"
                BandNames: [0×0 string]
                     FWHM: []
                     Gain: []
                   Offset: []
          ReflectanceGain: []
        ReflectanceOffset: []
                 BadBands: []
               CloudCover: []
               SunAzimuth: []
             SunElevation: []
    
    

    Чтение данных формата ENVI в рабочую область путем определения файла заголовка, который содержит информацию о гиперспектральных данных. Связанный с ним двоичный файл данных ENVI должен храниться в той же папке, что и заголовочный файл ENVI.

    hcube = hypercube('paviaU.hdr');

    Отображение свойств hypercube объект.

    hcube
    hcube = 
      hypercube with properties:
    
          DataCube: [610×340×103 double]
        Wavelength: [103×1 double]
          Metadata: [1×1 struct]
    
    

    Оцените изображение RGB из куба данных с помощью colorize функция. Увеличьте контрастность изображения RGB с помощью контрастного растяжения. Визуализация изображения RGB.

    rgbImg = colorize(hcube,'Method','RGB','ContrastStretching',true);
    figure
    imagesc(rgbImg)
    title('RGB Image of Data Cube')

    Присвойте новые значения центральной длины волны для гиперспектральных данных. Количество значений длины волны должно быть равно количеству полос в кубе гиперспектральных данных. Каждое значение длины волны должно быть уникальными значениями.

    minWavelength = 500;
    maxWavelength = 1010;
    newWavelength = minWavelength:5:maxWavelength;

    Создайте новую hypercube объект с новыми значениями длины волны.

    newhcube = hypercube('paviaU.hdr',newWavelength);

    Постройте график старых и новых значений длины волны. Отобразите область значений длин волн.

    figure
    plot(hcube.Wavelength,'o')
    hold on
    plot(newhcube.Wavelength,'or')
    xlabel('Band Number')
    ylabel('Wavelength')
    str1 = ['Original wavelength range: ' num2str(min(hcube.Wavelength))  'nm to ' num2str(max(hcube.Wavelength)) 'nm'];
    text(5,1075,str1)
    str2 = ['New wavelength range: ' num2str(min(newhcube.Wavelength))  'nm to ' num2str(max(newhcube.Wavelength)) 'nm'];
    text(5,1035,str2)
    legend('Original Values','New Values','Location','SouthEast')

    Чтение изображения RGB в рабочую область. Изображение RGB содержит три спектральных канала: красный, зеленый и синий.

    image = imread('peppers.png');

    Задайте значения центральной длины волны для красного, зеленого и синего каналов как 700, 530 и 470 нанометров (нм) соответственно.

    wavelength = [700 530 470];

    Создайте hypercube объект, использующий изображение и значения длины волны.

    hcube = hypercube(image,wavelength)
    hcube = 
      hypercube with properties:
    
          DataCube: [384×512×3 uint8]
        Wavelength: [3×1 double]
          Metadata: [1×1 struct]
    
    

    Считайте гиперспектральные данные в рабочую область и смотрите его свойства.

    hcube = hypercube('paviaU.dat');

    Осмотрите Metadata свойство hypercube объект.

    hcube.Metadata
    ans = struct with fields:
                 Filename: "/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/images/supportpackages/hyperspectral/hyperdata/paviaU.hdr"
              FileModDate: "25-Feb-2020 03:59:34"
                 FileSize: 654
                   Format: "HDR"
            FormatVersion: ''
               SensorType: [0x0 string]
              Description: [0x0 string]
          AcquisitionTime: [0x0 string]
             RasterFormat: "ENVI"
                   Height: 610
                    Width: 340
                    Bands: 103
                 DataType: "double"
               Interleave: "bsq"
             HeaderOffset: 0
                ByteOrder: "ieee-le"
                BandNames: [0x0 string]
                     FWHM: []
                     Gain: []
                   Offset: []
          ReflectanceGain: []
        ReflectanceOffset: []
                 BadBands: []
               CloudCover: []
               SunAzimuth: []
             SunElevation: []
          SolarIrradiance: []
         EarthSunDistance: []
          WavelengthUnits: "Nanometers"
    
    

    Найдите и удалите пустые поля из метаданных.

    metadata = hcube.Metadata;
    fields = fieldnames(metadata);
    indx = find(structfun(@isempty,metadata)==1);
    newMetadata = rmfield(metadata,fields(indx));

    Установите значение для AcquistionTime поле на текущую дату.

    currentDate = datestr(now,'yyyy-mm-dd');
    newMetadata.AcquistionTime = currentDate;

    Создайте hypercube объект с новыми метаданными. The DataCube и Wavelength свойства новой hypercube объект аналогичен объекту входных данных.

    nhcube = hypercube(hcube.DataCube,hcube.Wavelength,newMetadata);

    Осмотрите Metadata свойство нового hypercube объект.

    nhcube.Metadata
    ans = struct with fields:
                 Height: 610
                  Width: 340
                  Bands: 103
               DataType: "double"
             Interleave: "bsq"
           HeaderOffset: 0
              ByteOrder: "ieee-le"
         AcquistionTime: '2021-04-20'
        WavelengthUnits: "Nanometers"
    
    
    Введенный в R2020a
    Для просмотра документации необходимо авторизоваться на сайте