В этом примере показано, как обнаружить известную цель в гиперспектральном изображении с помощью метода спектрального согласования. Чистая спектральная сигнатура известного материала мишени используется для обнаружения и определения местоположения мишени в гиперспектральном изображении. В этом примере для обнаружения искусственных кровельных материалов (известных мишеней) в гиперспектральном изображении будет использоваться метод спектрального сопоставления (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.
colorize | hypercube | readEcostressSig | spectralMatch