Гиперспектральный анализ изображения Используя максимальную классификацию распространенностей

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

Этот пример использует выборку данных от набора данных Pavia University как тестовые данные. Тестовые данные содержат девять endmembers, которые представляют эти классы основной истины: Асфальт, Луга, Гравий, Деревья, Нарисованные металлические листы, Пустая почва, Битум, Сам блокирующиеся кирпичи и Тени.

Загрузите и визуализируйте данные

Загрузите .mat файл, содержащий тестовые данные в рабочую область. .mat файл содержит массив paviaU, представление гиперспектрального куба данных и матричного signatures, представление девяти endmember подписей, взятых из гиперспектральных данных. Куб данных имеет 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 object. The axes object contains an object of type image.

Тестовые данные содержат endmember подписи девяти классов основной истины. Каждый столбец sig содержите endmember подпись класса основной истины. Составьте таблицу, которая перечисляет имя класса для каждого endmember и соответствующего столбца 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'             }

Постройте endmember подписи.

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

Figure contains an axes object. The axes object 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.

Оцените карты распространенности

Создайте карты распространенности endmembers при помощи estimateAbundanceLS функционируйте и выберите метод как полный метод наименьших квадратов с ограничениями (FCLS). Функциональные выходные параметры распространенность сопоставляют как трехмерный массив с пространственными размерностями как входные данные. Каждый канал является картой распространенности endmember из соответствующего столбца подписей. В этом примере пространственная размерность входных данных 610 340, и количество endmembers равняется 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 objects. Axes object 1 with title Abundance of Asphalt contains an object of type image. Axes object 2 with title Abundance of Meadows contains an object of type image. Axes object 3 with title Abundance of Gravel contains an object of type image. Axes object 4 with title Abundance of Trees contains an object of type image. Axes object 5 with title Abundance of Painted metal sheets contains an object of type image. Axes object 6 with title Abundance of Bare soil contains an object of type image. Axes object 7 with title Abundance of Bitumen contains an object of type image. Axes object 8 with title Abundance of Self blocking bricks contains an object of type image. Axes object 9 with title Abundance of Shadows contains an object of type image.

Выполните максимальную классификацию распространенностей

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

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

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

Смотрите также

| |

Похожие темы