exponenta event banner

Анализ гиперспектральных изображений с использованием классификации максимального количества

В этом примере показано, как идентифицировать различные области в гиперспектральном изображении, выполняя классификацию максимальной плотности (MAC). Карта изобилия характеризует распределение конечного элемента по гиперспектральному изображению. Каждый пиксель в изображении представляет собой либо чистый пиксель, либо смешанный пиксель. Набор значений плотности, полученных для каждого пикселя, представляет процент каждого конечного элемента, присутствующего в этом пикселе. В этом примере можно классифицировать пикселы в гиперспектральном изображении, найдя максимальное значение плотности для каждого пикселя и назначив его связанному классу конечных элементов.

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

Загрузка и визуализация данных

Загрузить .mat файл, содержащий тестовые данные, в рабочую область. .mat файл содержит массив paviaU, представляющий гиперсектральный куб данных и матрицу signatures, представляя девять сигнатур конечных элементов, взятых из гиперспектральных данных. Куб данных имеет 103 спектральных полосы с длинами волн от 430 нм до 860 нм. Геометрическое разрешение составляет 1,3 метра, а пространственное разрешение каждого изображения полосы - 610 на 340.

load('paviaU.mat');
image = paviaU;
sig = signatures;

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

wavelengthRange = [430 860];
numBands = 103;
wavelength = linspace(wavelengthRange(1),wavelengthRange(2),numBands);

Создать hypercube объект с использованием гиперспектрального куба данных и центральных длин волн. Затем оцените изображение RGB по гиперспектральным данным. Установите ContrastStretching значение параметра для true для улучшения контрастности выходных данных RGB. Визуализация изображения RGB.

hcube = hypercube(image,wavelength);
rgbImg = colorize(hcube,'Method','RGB','ContrastStretching',true);
figure
imshow(rgbImg)

Figure contains an axes. The axes contains an object of type image.

Данные теста содержат сигнатуры конечных элементов девяти классов истинности земли. Каждый столбец sig содержат сигнатуру конечного элемента базового класса истинности. Создайте таблицу, содержащую имя класса для каждого конечного элемента и соответствующий столбец sig.

num = 1:size(sig,2);
endmemberCol = num2str(num');
classNames = {'Asphalt';'Meadows';'Gravel';'Trees';'Painted metal sheets';'Bare soil';...
              'Bitumen';'Self blocking bricks';'Shadows'};
table(endmemberCol,classNames,'VariableName',{'Column of sig';'Endmember Class Name'})
ans=9×2 table
    Column of sig      Endmember Class Name  
    _____________    ________________________

          1          {'Asphalt'             }
          2          {'Meadows'             }
          3          {'Gravel'              }
          4          {'Trees'               }
          5          {'Painted metal sheets'}
          6          {'Bare soil'           }
          7          {'Bitumen'             }
          8          {'Self blocking bricks'}
          9          {'Shadows'             }

Постройте график подписей конечных элементов.

figure
plot(sig)
xlabel('Band Number')
ylabel('Data Values')
ylim([400 2700])
title('Endmember Signatures')
legend(classNames,'Location','NorthWest')

Figure contains an axes. The axes with title Endmember Signatures contains 9 objects of type line. These objects represent Asphalt, Meadows, Gravel, Trees, Painted metal sheets, Bare soil, Bitumen, Self blocking bricks, Shadows.

Оценка карт изобилия

Создание карт изобилия конечных элементов с помощью estimateAbundanceLS и выберите метод как полные ограниченные наименьшие квадраты (FCLS). Функция выводит карты плотности в виде массива 3-D с пространственными размерами в качестве входных данных. Каждый канал - это карта изобилия конечного элемента из соответствующего столбца подписей. В этом примере пространственная размерность входных данных равна 610 на 340, а число конечных элементов равно 9. Так, размер выходной карты изобилия составляет 610-на-340-на-9.

abundanceMap = estimateAbundanceLS(hcube,sig,'Method','fcls');

Отображение карт изобилия.

fig = figure('Position',[0 0 1100 900]);
n = ceil(sqrt(size(abundanceMap,3)));
for cnt = 1:size(abundanceMap,3)
    subplot(n,n,cnt)
    imagesc(abundanceMap(:,:,cnt))
    title(['Abundance of ' classNames{cnt}])
    hold on
end
hold off

Figure contains 9 axes. Axes 1 with title Abundance of Asphalt contains an object of type image. Axes 2 with title Abundance of Meadows contains an object of type image. Axes 3 with title Abundance of Gravel contains an object of type image. Axes 4 with title Abundance of Trees contains an object of type image. Axes 5 with title Abundance of Painted metal sheets contains an object of type image. Axes 6 with title Abundance of Bare soil contains an object of type image. Axes 7 with title Abundance of Bitumen contains an object of type image. Axes 8 with title Abundance of Self blocking bricks contains an object of type image. Axes 9 with title Abundance of Shadows contains an object of type image.

Выполнить классификацию максимального количества

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

[~,matchIdx] = max(abundanceMap,[],3);
figure
imagesc(matchIdx)
colormap(jet(numel(classNames)))
colorbar('TickLabels',classNames)

Figure contains an axes. The axes contains an object of type image.

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

segmentImg = zeros(size(matchIdx));
overlayImg = zeros(size(abundanceMap,1),size(abundanceMap,2),3,size(abundanceMap,3));
for i = 1:size(abundanceMap,3)
    segmentImg(matchIdx==i) = 1;
    overlayImg(:,:,:,i) = imoverlay(rgbImg,segmentImg);
    segmentImg = zeros(size(matchIdx));
end

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

figure('Position',[0 0 1100 900]);
n = ceil(sqrt(size(abundanceMap,3)));
for cnt = 1:size(abundanceMap,3)
    subplot(n,n,cnt);
    imagesc(uint8(overlayImg(:,:,:,cnt)));
    title(['Regions Classified as ' classNames{cnt}])
    hold on
end
hold off

Figure contains 9 axes. Axes 1 with title Regions Classified as Asphalt contains an object of type image. Axes 2 with title Regions Classified as Meadows contains an object of type image. Axes 3 with title Regions Classified as Gravel contains an object of type image. Axes 4 with title Regions Classified as Trees contains an object of type image. Axes 5 with title Regions Classified as Painted metal sheets contains an object of type image. Axes 6 with title Regions Classified as Bare soil contains an object of type image. Axes 7 with title Regions Classified as Bitumen contains an object of type image. Axes 8 with title Regions Classified as Self blocking bricks contains an object of type image. Axes 9 with title Regions Classified as Shadows contains an object of type image.

См. также

| |

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