В этом примере показаны некоторые основные методы композиции изображения и улучшения для использования с многоспектральными данными. Часто для создания изображения, пригодного для визуальной интерпретации, необходимо улучшить данные многоспектрального излучения или отражения. В этом примере используется тематическое изображение картографии Landsat, охватывающее часть Парижа, Франция. Семь спектральных диапазонов хранятся в одном файле в формате LAN Erdas. Рассматриваемые концепции включают в себя:
Чтение многоспектральных данных из файлов Erdas LAN
Построение цветных композитов из различных комбинаций полос
Улучшение изображения с помощью контрастного растяжения
Улучшение изображения с помощью растяжения декорреляции
Использование точечных диаграмм
файл LAN, paris.lan, содержит изображение Ландсата в 7 диапазонах 512 на 512. За 128-байтовым заголовком следуют значения пикселей, которые перемежаются по линии (BIL) в порядке увеличения номера полосы. Они хранятся как беззнаковые 8-битные целые числа, в порядке байтов little-endian.
Считывание полос 3, 2 и 1 из файла LAN с помощью функции MATLAB ®multibandread. Эти полосы охватывают видимую часть спектра. Если они сопоставлены с красной, зеленой и синей плоскостями, соответственно, изображения RGB, результатом будет стандартный композит цвета. Последний входной аргумент для multibandread указывает, какие области данных следует считывать, и в каком порядке, чтобы можно было создать составной элемент RGB за один шаг.
truecolor = multibandread('paris.lan',[512, 512, 7],'uint8=>uint8', ... 128,'bil','ieee-le',{'Band','Direct',[3 2 1]});
Цветовой композит очень мало контрастен, а цвета несбалансированы.
imshow(truecolor) title('Truecolor Composite (Un-Enhanced)') text(size(truecolor,2),size(truecolor,1)+15,... 'Image courtesy of Space Imaging, LLC',... 'FontSize',7,'HorizontalAlignment','right')

Например, просматривая гистограмму красной полосы, можно увидеть, что данные сконцентрированы в небольшой части доступного динамического диапазона. Это одна из причин, по которой трюкколорный композит выглядит унылым.
imhist(truecolor(:,:,1))
title('Histogram of the Red Band (Band 3)')
Другой причиной тусклого внешнего вида композита является то, что видимые полосы сильно коррелируют друг с другом. Двух- и трехполосные диаграммы рассеяния являются отличным способом измерения степени корреляции между спектральными полосами. Вы можете сделать их легко, просто используя plot. Линейный тренд красно-зелёно-синей рассеянной диаграммы указывает на то, что видимые полосы сильно коррелированы. Это помогает объяснить монохроматический вид нерасширенного триеколорного композита.
r = truecolor(:,:,1); g = truecolor(:,:,2); b = truecolor(:,:,3); plot3(r(:),g(:),b(:),'.') grid('on') xlabel('Red (Band 3)') ylabel('Green (Band 2)') zlabel('Blue (Band 1)') title('Scatterplot of the Visible Bands')

При использовании imadjust для применения линейного контрастного растяжения к составному изображению, состоящему из трюэколора, элементы поверхности легче распознать.
stretched_truecolor = imadjust(truecolor,stretchlim(truecolor));
imshow(stretched_truecolor)
title('Truecolor Composite after Contrast Stretch')
Гистограмма красной полосы после применения контрастного растяжения показывает, что данные были распределены по гораздо большему доступному динамическому диапазону. Создайте гистограмму всех значений красного пикселя в изображении с помощью imhist функция.
imhist(stretched_truecolor(:,:,1))
title('Histogram of Red Band (Band 3) after Contrast Stretch')
Еще один способ улучшить трюкколорный композит - использовать декорреляционную растяжку, которая усиливает цветоделение по сильно коррелированным каналам. Использовать decorrstretch для выполнения растяжения декорреляции. Укажите необязательную пару имя-значение 'Tol',0.1 для выполнения линейного контрастного растяжения после декорреляционного растяжения. Опять же, черты поверхности стали гораздо более отчетливо видны, но по-другому. Спектральные различия в сцене были преувеличены. Заметным примером является область зеленого на левом краю, которая выглядит черной в контрастно растянутом композите. Эта зелёная зона - Буа-де-Булонь, большой парк на западном краю Парижа.
decorrstretched_truecolor = decorrstretch(truecolor,'Tol',0.01); imshow(decorrstretched_truecolor) title('Truecolor Composite after Decorrelation Stretch')

Как и ожидалось, диаграмма рассеяния после растяжения декорреляции показывает сильное снижение корреляции.
r = decorrstretched_truecolor(:,:,1); g = decorrstretched_truecolor(:,:,2); b = decorrstretched_truecolor(:,:,3); plot3(r(:),g(:),b(:),'.') grid('on') xlabel('Red (Band 3)') ylabel('Green (Band 2)') zlabel('Blue (Band 1)') title('Scatterplot of the Visible Bands after Decorrelation Stretch')

Так же, как и в случае видимых полос, информацию из полос Landsat, покрывающих невидимые части спектра, можно просмотреть путем построения и улучшения составных изображений RGB. Ближняя инфракрасная (NIR) полоса (полоса 4) важна из-за высокой отражательной способности хлорофилла в этой части спектра. Еще более полезно в сочетании с видимым красным и зеленым (полосы 3 и 2 соответственно) сформировать цветное инфракрасное (CIR) составное изображение. Цветные инфракрасные (CIR) композиты обычно используются для идентификации растительности или оценки ее состояния роста и/или здоровья.
Создайте композит CIR, прочитав из исходного файла LAN и составив изображение RGB, отображающее полосы 4, 3 и 2 на красный, зеленый и синий соответственно.
CIR = multibandread('paris.lan',[512, 512, 7],'uint8=>uint8', ... 128,'bil','ieee-le',{'Band','Direct',[4 3 2]});
Несмотря на то, что ближняя инфракрасная (NIR) полоса (полоса 4) меньше коррелирует с видимыми полосами, чем видимые полосы друг с другом, декорреляционное растяжение облегчает просмотр многих признаков. Свойство цветных инфракрасных композитов заключается в том, что они выглядят красными на участках с высокой плотностью растительности (хлорофилла). Обратите внимание, что парк Буа-де-Булонь имеет красный цвет в композите CIR, что соответствует его зеленому виду в декорреляционно-растянутом композите.
stretched_CIR = decorrstretch(CIR,'Tol',0.01); imshow(stretched_CIR) title('CIR after Decorrelation Stretch')

decorrstretch | imadjust | imhist | multibandread | plot3 | stretchlim