Классификация гиперспектрального изображения с помощью сигнатур библиотеки и 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 указывают на более высокое спектральное сходство. Используйте цитерию минимального счета, чтобы классифицировать тестовые пиксели путем нахождения наилучшего соответствия для каждого пикселя среди сигнатур библиотеки. Результатом является пиксельная карта классификации, в которой значение каждого пикселя является индексом файла сигнатуры библиотеки в 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] Kruse, F.A., A.B. Lefkoff, J.W. Boardman, K.B. Heidebrecht, A.T. Shapiro, P.J. Barloon и A.F.H. Гетц. «Система спектральной обработки изображений (SIPS) - интерактивная визуализация и анализ данных спектрометра визуализации». Дистанционное зондирование окружения 44, № 2-3 (май 1993 года): 145-63. https://doi.org/10.1016/0034-4257 (93) 90013-N.

См. также

| | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте