Обнаружение цели с использованием соответствия спектральной сигнатуры

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

Этот пример использует выборку данных, взятую из набора данных Pavia University, в качестве тестовых данных. Набор данных содержит сигнатуры конечных элементов для 9 классов groundtruth, и каждая сигнатура является вектором длины 103. Классы основной истины включают Asphalt, Meadows, Gravel, Trees, Painted metal sheets, Bare estate, Bitumen, Self blocking bricks и Shadows. Из этих классов окрашенные металлические листы обычно относятся к типу кровельных материалов, и это желаемая цель для размещения.

Чтение тестовых данных

Считайте тестовые данные из набора данных Университета Павии при помощи hypercube функция. Функция возвращает hypercube объект, который хранит кубик данных и информацию о метаданных, считанную из тестовых данных. Тестовые данные имеют 103 спектральные полосы и их длины волн варьируются от 430 нм до 860 нм. Геометрическое разрешение составляет 1,3 метра, и пространственное разрешение каждой полосы изображения составляет 610 на 340.

hcube = hypercube('paviaU.hdr');

Оцените цветное изображение RGB из куба данных с помощью colorize функция. Установите ContrastStretching значение параметров в true в порядок улучшить контрастность цветного изображения RGB. Отображение изображения RGB.

rgbImg = colorize(hcube,'Method','rgb','ContrastStretching',true);
figure
imshow(rgbImg)
title('RGB Image')

Чтение эталонного спектра

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

fileroot = matlabshared.supportpkg.getSupportPackageRoot();
addpath(fullfile(fileroot,'toolbox','images','supportpackages','hyperspectral','hyperdata','ECOSTRESSSpectraFiles'));
lib = readEcostressSig("manmade.roofingmaterial.metal.solid.all.0692uuucop.jhu.becknic.spectrum.txt");

Проверьте свойства эталонного спектра, считанного из библиотеки ECOSTRESS. Область структуры output lib сохраняет метаданные и значения данных, считанные из библиотеки ECOSTRESS.

lib
lib = struct with fields:
                     Name: "Copper Metal"
                     Type: "manmade"
                    Class: "Roofing Material"
                 SubClass: "Metal"
             ParticleSize: "Solid"
                    Genus: [0×0 string]
                  Species: [0×0 string]
                 SampleNo: "0692UUUCOP"
                    Owner: "National Photographic Interpretation Center"
          WavelengthRange: "All"
                   Origin: "Spectra obtained from the Noncoventional Exploitation FactorsData System of the National Photographic Interpretation Center."
           CollectionDate: "N/A"
              Description: "Extremely weathered bare copper metal from government building roof flashing. Original ASTER Spectral Library name was jhu.becknic.manmade.roofing.metal.solid.0692uuu.spectrum.txt"
              Measurement: "Directional (10 Degree) Hemispherical Reflectance"
              FirstColumn: "X"
             SecondColumn: "Y"
           WavelengthUnit: "micrometer"
                 DataUnit: "Reflectance (percent)"
              FirstXValue: "0.3000"
               LastXValue: "12.5000"
          NumberOfXValues: "536"
    AdditionalInformation: "none"
               Wavelength: [536×1 double]
              Reflectance: [536×1 double]

Считайте длину волны и значения отражающей способности, сохраненные в lib. Длина волны и пара отражений содержат ссылку спектр или ссылка спектральную сигнатуру.

wavelength = lib.Wavelength;
reflectance = lib.Reflectance;

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

plot(wavelength,reflectance,'LineWidth',2)
axis tight
xlabel('Wavelength (\mum)')
ylabel('Reflectance (%)')
title('Reference Spectrum')

Выполните спектральное согласование

Найдите спектральное сходство между спектром ссылок и кубом данных при помощи spectralMatch функция. По умолчанию функция использует метод спектрального преобразования угла (SAM) для нахождения спектрального соответствия. Выход является счетом картой, которая означает соответствие между каждым пиксельным спектром и ссылкой спектром. Таким образом, карта счетов является матрицей пространственной размерности, такой же как и у тестовых данных. При этом размер карты счета составляет 610 на 340. SAM нечувствителен к коэффициентам усиления и, следовательно, может использоваться, чтобы соответствовать пиксельному спектру, который по своей сути имеет неизвестный коэффициент усиления из-за эффектов топографического освещения.

scoreMap = spectralMatch(lib,hcube);

Отобразите карту счета.

figure('Position',[0 0 500 600])
imagesc(scoreMap)
colormap parula
colorbar
title('Score Map')

Классификация и обнаружение цели

Типичные значения для счета SAM находятся в области значений [0, 3.142], и модулем измерения является радиан. Более низкое значение счета SAM представляет лучшее соответствие между пиксельным спектром и ссылкой спектром. Используйте метод порогового значения, чтобы пространственно локализовать целевую область во входных данных. Чтобы определить порог, смотрите гистограмму карты счетов. Минимальное значение баллов SAM с заметным количеством вхождений может использоваться, чтобы выбрать порог для обнаружения целевой области.

figure
imhist(scoreMap);
title('Histogram Plot of Score Map');
xlabel('Score Map Values')
ylabel('Number of occurrences');

Из графика гистограммы можно вывести минимальное значение баллов с заметным количеством вхождений приблизительно 0,22. Соответственно, можно задать значение вокруг локальных максимумов в качестве порога. В данном примере можно выбрать порог для обнаружения цели 0,25. Значения пикселей, которые меньше максимального порога, классифицируются как целевая область.

maxthreshold = 0.25;

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

thresholdedImg = scoreMap <= maxthreshold;
overlaidImg = imoverlay(rgbImg,thresholdedImg,'green');

Отображение результатов.

fig = figure('Position',[0 0 900 500]);
axes1 = axes('Parent',fig,'Position',[0.04 0.11 0.4 0.82]);
imagesc(thresholdedImg,'Parent',axes1);
colormap([0 0 0;1 1 1]);
title('Detected Target Region')
axis off
axes2 = axes('Parent',fig,'Position',[0.47 0.11 0.4 0.82]);
imagesc(overlaidImg,'Parent',axes2)
axis off
title('Overlaid Detection Results')

Проверьте результаты обнаружения

Можно подтвердить полученные результаты обнаружения цели с помощью достоверных данных, взятых из набора данных Университета Павии.

Загрузите .mat файл, содержащий достоверные данные. Чтобы подтвердить результат количественно, вычислите среднюю квадратичную невязку между основной истиной и выходом. Значение ошибки меньше, если полученные результаты близки к основной истине.

load('paviauRoofingGT.mat');
err = immse(im2double(paviauRoofingGT), im2double(thresholdedImg));
fprintf('\n The mean squared error is %0.4f\n', err)
 The mean squared error is 0.0040
fig = figure('Position',[0 0 900 500]);
axes1 = axes('Parent',fig,'Position',[0.04 0.11 0.4 0.82]);
imagesc(thresholdedImg,'Parent',axes1);
colormap([0 0 0;1 1 1]);
title('Result Obtained')
axis off
axes2 = axes('Parent',fig,'Position',[0.47 0.11 0.4 0.82]);
imagesc(paviauRoofingGT,'Parent',axes2)
colormap([0 0 0;1 1 1]);
axis off
title('Ground Truth')

Ссылки

[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.

[2] Чин-И Чанг. «Информационно-теоретический подход к спектральной изменчивости, подобию и дискриминации для гиперспектрального анализа изображений». Транзакции IEEE по теории информации 46, № 5 (август 2000): 1927-32. https://doi.org/10.1109/18.857802.

См. также

| | |

Похожие темы

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