exponenta event banner

гиперкуб

Считывание гиперспектральных данных

    Описание

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

    Создание

    Описание

    пример

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

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

    • EO-1 Усовершенствованный наземный формирователь изображений (EO-1 ALI)

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

    • Тематический картограф Landsat (Landsat TM)

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

    • Landsat Оперативный наземный/тепловой инфракрасный сканер (Landsat OLI/TIRS)

    Примечание

    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 свойство объекта гиперкуба.

    Примечание

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

    Входные аргументы

    развернуть все

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

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

    .ntf

    .nsf

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

    Файлы образов ENVI

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

    .dat

    .hdr

    Файл изображения и заголовка должен находиться в одной папке и иметь одинаковое имя.

    Уровень гипериона 1R файлы изображений

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

    .L1R

    .hdr

    Файл изображения и заголовка должен находиться в одной папке и иметь одинаковое имя.

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

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

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

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

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

    Значения центральной длины волны каждого спектрального диапазона, заданные как вектор С-элемента. 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 - спектральная размерность, определяемая как количество спектральных полос, входных гиперспектральных данных. Это свойство можно задать с помощью 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".

    Примечание

    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 с новыми метаданными. 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