exponenta event banner

Классифицировать гиперспектральное изображение с помощью сигнатур библиотеки и SAM

В этом примере показано, как классифицировать пикселы в гиперспектральном изображении с помощью алгоритма классификации SAM. Этот алгоритм классифицирует каждый пиксель в тестовых данных путем вычисления спектральной оценки соответствия между спектром пикселя и чистыми спектральными сигнатурами, считанными из спектральной библиотеки ECOSTRESS. В этом примере в качестве тестовых данных используется образец данных из набора данных Jasper Ridge. Данные испытаний содержат четыре скрытых конечных элемента, состоящих из дорог, почвы, воды и деревьев. В этом примере будут выполнены следующие действия:

  1. Формирование карты оценки для различных областей, присутствующих в тестовых данных, путем вычисления оценки спектрального соответствия SAM между спектром каждого тестового пикселя и чистым спектром. Чистые спектры получены из спектральной библиотеки ECOSTRESS.

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

Считывание тестовых данных

Считывание тестовых данных из набора данных Jasper Ridge с помощью hypercube функция. Функция возвращает hypercube объект, который хранит куб гиперспектральных данных и соответствующую длину волны и информацию метаданных, считанную из тестовых данных. Тестовые данные имеют 198 спектральных полос и их длины волн находятся в диапазоне от 399,4 нм до 2457 нм. Спектральное разрешение составляет до 9,9 нм, а пространственное разрешение каждого полосового изображения - 100 на 100.

hcube = hypercube('jasperRidge2_R198.img')
hcube = 
  hypercube with properties:

      DataCube: [100×100×198 int16]
    Wavelength: [198×1 double]
      Metadata: [1×1 struct]

Оцените изображение RGB из куба данных. Используйте растягивание контрастности для повышения контрастности выходного изображения RGB.

rgbImg = colorize(hcube,'Method','rgb','ContrastStretching',true);

Отображение RGB-изображения тестовых данных.

figure
imagesc(rgbImg);
axis image off
title('RGB Image of Data Cube')

Считывание сигнатур из спектральной библиотеки ECOSTRESS

Спектральный ибрарий ECOSTRESS состоит из чистых спектральных сигнатур для отдельных поверхностных материалов. Если спектр пикселя соответствует сигнатуре из библиотеки ECOSTRESS, пиксель полностью состоит из этого материала с одной поверхностью. Библиотека представляет собой компиляцию из более чем 3400 спектральных подписей как для естественных, так и для рукотворных материалов. Поскольку вы знаете скрытые конечные элементы в тестовых данных, выберите файлы спектральной библиотеки ECOSTRESS, связанные с этими четырьмя конечными элементами.

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

  • Manmade для классификации дорог и автодорожных сооружений

  • Почва для классификации песчаных, илистых и глинистых участков

  • Растительность для классификации регионов деревьев

  • Вода для классификации водных районов

fileroot = matlabshared.supportpkg.getSupportPackageRoot();
addpath(fullfile(fileroot,'toolbox','images','supportpackages','hyperspectral',...
    'hyperdata','ECOSTRESSSpectraFiles'));

filenames = ["water.seawater.none.liquid.tir.seafoam.jhu.becknic.spectrum.txt",...
    "vegetation.tree.eucalyptus.maculata.vswir.jpl087.jpl.asd.spectrum.txt",...
    "soil.utisol.hapludult.none.all.87p707.jhu.becknic.spectrum.txt",...
    "soil.mollisol.cryoboroll.none.all.85p4663.jhu.becknic.spectrum.txt",...    
    "manmade.concrete.pavingconcrete.solid.all.0092uuu_cnc.jhu.becknic.spectrum.txt"];
lib = readEcostressSig(filenames)
lib=1×5 struct array with fields:
    Name
    Type
    Class
    SubClass
    ParticleSize
    Genus
    Species
    SampleNo
    Owner
    WavelengthRange
    Origin
    CollectionDate
    Description
    Measurement
    FirstColumn
    SecondColumn
    WavelengthUnit
    DataUnit
    FirstXValue
    LastXValue
    NumberOfXValues
    AdditionalInformation
    Wavelength
    Reflectance
      ⋮

Извлеките имена классов из структуры библиотеки.

classNames = [lib.Class];

Постройте график чистых спектральных сигнатур, считанных из спектральной библиотеки ECOSTRESS.

figure
hold on
for idx = 1:numel(lib)
    plot(lib(idx).Wavelength,lib(idx).Reflectance,'LineWidth',2)
end
axis tight
box on
title('Pure Spectral Signatures from ECOSTRESS Library')
xlabel('Wavelength (\mum)')
ylabel('Reflectance (%)')
legend(classNames,'Location','northeast')
title(legend,'Class Names')
hold off

Вычислить карту баллов для пикселей в тестовых данных

Найдите спектральную оценку соответствия между каждым спектром пикселей и сигнатурами библиотеки, используя spectralMatch функция. По умолчанию spectralMatch функция вычисляет степень подобия между двумя спектрами с использованием алгоритма классификации SAM. Функция возвращает массив с теми же пространственными измерениями, что и гиперспектральный куб данных и каналы, равные числу указанных сигнатур библиотеки. Каждый канал содержит карту оценки для одной подписи библиотеки. В этом примере имеется пять файлов спектральной библиотеки ECOSTRESS, заданных для сравнения, и каждая полоса гиперспектрального куба данных имеет пространственные размеры 100 на 100 пикселей. Размер множества продукции карт счета таким образом составляет 100 на 100 на 5.

scoreMap = spectralMatch(lib,hcube);

Просмотрите карты баллов.

figure
montage(scoreMap,'Size',[1 numel(lib)],'BorderSize',10)
title('Score Map Obtained for Each Pure Spectrum','FontSize',14)
colormap(jet);
colorbar

Классифицировать пикселы с использованием критериев минимального балла

Более низкие значения SAM указывают на более высокое спектральное сходство. Используйте минимальную оценку citeria, чтобы классифицировать тестовые пикселы, найдя наилучшее совпадение для каждого пикселя среди сигнатур библиотеки. Результатом является пиксельная карта классификации, в которой значение каждого пикселя является индексом файла сигнатуры библиотеки в lib для которого пиксель имеет наименьшее значение SAM. Например, если значение пикселя в карте классификации равно 1, пиксель демонстрирует высокое сходство с первой сигнатурой библиотеки в lib.

[~,classMap] = min(scoreMap,[],3);

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

classTable = table((min(classMap(:)):max(classMap(:)))',classNames',...
             'VariableNames',{'Classification map value','Matching library signature'})
classTable=5×2 table
    Classification map value    Matching library signature
    ________________________    __________________________

               1                       "Sea Water"        
               2                       "Tree"             
               3                       "Utisol"           
               4                       "Mollisol"         
               5                       "Concrete"         

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

fig = figure('Position',[0 0 700 300]);
axes1 = axes('Parent',fig,'Position',[0.04 0 0.4 0.9]);
imagesc(rgbImg,'Parent',axes1);
axis off
title('RGB Image of Data Cube')
axes2 = axes('Parent',fig,'Position',[0.47 0 0.45 0.9]);
imagesc(classMap,'Parent',axes2)
axis off
colormap(jet(numel(lib)))
title('Pixel-wise Classification Map')
ticks = linspace(1.4,4.8,numel(lib));
colorbar('Ticks',ticks,'TickLabels',classNames)     

Ссылки

[1] Крузе, Ф.А., А.Б. Лефкофф, Дж.У. Бордман, К.Б. Хайдебрехт, А.Т. Шапиро, П.Дж. Барлоон и А.Ф.Х. Гетц. «Система обработки спектральных изображений (SIPS) - интерактивная визуализация и анализ данных спектрометра визуализации». Дистанционное зондирование окружающей среды 44, № 2-3 (май 1993 года): 145-63. https://doi.org/10.1016/0034-4257 (93) 90013-N.

См. также

| | |

Связанные темы