В этом примере показано, как обнаружить известную цель в гиперспектральном изображении при помощи спектрального метода сопоставления. Чистая спектральная подпись известного целевого материала используется, чтобы обнаружить и определить местоположение цели в гиперспектральном изображении. В этом примере вы будете использовать спектральный угловой картопостроитель (SAM) спектральный метод сопоставления обнаружить искусственные кровельные материалы (известная цель) в гиперспектральном изображении. Чистая спектральная подпись кровельного материала читается из спектрального lbrary ECOSTRESS и используется в качестве ссылочных спектров для спектрального соответствия. Спектральные подписи всех пикселей в кубе данных по сравнению со ссылочными спектрами, и лучшие пиксельные спектры соответствия классифицируются как принадлежащий целевому материалу.
Этот пример использует выборку данных, взятую из набора данных Pavia Universtity как тестовые данные. Набор данных содержит endmember подписи для 9 groundtruth классов, и каждая подпись является вектором из длины 103. Классы основной истины включают Асфальт, Луга, Гравий, Деревья, Нарисованные металлические листы, Пустую почву, Битум, Сам блокирующиеся кирпичи и Тени. Из этих классов нарисованные металлические листы обычно принадлежат кровельному типу материалов, и это - желаемая цель, которая будет расположена.
Считайте тестовые данные из набора данных University Павии при помощи 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");
Смотрите свойства referece спектров, считанных из библиотеки 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 Spectra')
Найдите спектральное подобие между ссылочными спектрами и кубом данных при помощи 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')
Можно подтвердить полученные целевые результаты обнаружения при помощи достоверных данных, взятых из набора данных University Павии.
Загрузите .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] Крюзе, F.A., А.Б. Лефкофф, Дж.В. Боардмен, К.Б. Хейдебречт, А.Т. Шапиро, П.Дж. Барлун и A.F.H. Goetz. “Спектральная система обработки изображений (SIPS) — Интерактивная Визуализация и Анализ Обработки изображений Данных о Спектрометре”. Дистанционное зондирование Среды 44, № 2-3 (май 1993): 145–63. https://doi.org/10.1016/0034-4257 (93) 90 013 Н.
[2] Чейн-Ай Чанг. “Информационно-теоретический Подход к Спектральной Изменчивости, Подобию и Дискриминации для Гиперспектрального Анализа изображения”. Транзакции IEEE на Теории информации 46, № 5 (август 2000): 1927–32. https://doi.org/10.1109/18.857802.
colorize
| hypercube
| readEcostressSig
| spectralMatch