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