exponenta event banner

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

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

В этом примере в качестве тестовых данных используется выборка данных из набора данных Pavia University. Набор данных содержит сигнатуры конечных элементов для 9 классов groundtruth, и каждая сигнатура является вектором длиной 103. Классы наземной правды включают Асфальт, Луга, Гравий, Деревья, Раскрашенные металлические листы, Голый грунт, Битум, Самоблокирующиеся кирпичи и Тени. Из этих классов окрашенные металлические листы обычно относятся к типу кровельных материалов, и это является желаемой целью для размещения.

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

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

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

См. также

| | |

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