hypercube

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

    Описание

    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)

    • Landsat расширенный тематический картопостроитель плюс (Landsat ETM +)

    • Landsat Операционный Формирователь изображения Земли / Тепловой Инфракрасный Сканер (Landsat OLI / TIRS)

    Примечание

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

    пример

    hcube = hypercube(img,hdr) считывает гиперспектральные данные из файла данных img. Файл данных может быть файлом изображения ENVI или файлом Hyperion L1R. Функция использует метаданные в заголовочном файле 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 Гиперспектральная Библиотека Обработки изображений из Add-On Explorer. Для получения дополнительной информации об установке дополнений, смотрите, Получают и Управляют Дополнениями.

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

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

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

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

    .ntf

    .nsf

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

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

    Заголовочные файлы ENVI

    .dat

    .hdr

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

    Файлы изображений уровня 1R Гипериона

    Заголовочные файлы Гипериона

    .L1R

    .hdr

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

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

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

    Типы данных: 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. Куб данных хранит гиперспектральные данные, считанные из файла или числового массива как массив 2D монохроматических изображений. 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Ширина изображения или количество столбцов в кубе данных в виде положительного целого числа
    ПолосыКоличество диапазонов, включающих куб данных в виде положительного целого числа
    Тип данных

    Тип данных данных в виде любого из этих значений:

    • "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
    Для просмотра документации необходимо авторизоваться на сайте