MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

Математика\Mapping Toolbox

В оглавление \ К предыдущему разделу \ К следующему разделу

Улучшение мультиспектральных GeoTIFF–изображений

Довольно часто мультиспектральные изображения нуждаются в проведении их предварительной обработки. Это приводит к повышению качества их визуального восприятия и повышению их информативности.

В этом материале рассматривается технология повышения визуального качества мультиспектральных изображений. В качестве исходного используется изображение части Бостона (штат Массачусетс). Каждый спектральный диапазон сохраняется отдельно в одном файле, представленном в GeoTIFF формате.

Содержание:

Шаг 1: Считывание GeoTIFF файлов изображений разных спектральных диапазонов и построение полноцветных изображений.

Считаем красный, зеленый и синий спектральные диапазоны из GeoTIFF файла. Эти диапазоны покрывают видимую часть спектра. Если же эти диапазоны представить в виде красной, зеленой и синей составляющих некоторого RGB изображения, то в результате получим полноцветное изображение.

[truecolor(:,:,1), R, bbox]   = geotiffread('boston_red.tif');
truecolor(:,:,2) = geotiffread('boston_green.tif');
truecolor(:,:,3) = geotiffread('boston_blue.tif');

Визуализируем сформированное полноцветное изображение.

figure
mapshow(truecolor,R);
xlabel('Easting (meters)');
ylabel('Northing (meters)');
title({Truecolor Composite ', 'Copyright Space Imaging LLC'});

 

Шаг 2a: Улучшение спектральных полноцветных изображений методом растяжения диапазона яркостей.

Сформированное полноцветное изображение имеет сине–зеленый фон и является темным. Для устранения этих недостатков применяются различные методы. Сначала рассмотрим метод растяжения динамического диапазона с помощью функции imadjust. Отметим, что растяжение динамического диапазона выполняется для каждой цветовой составляющей отдельно.

Для получения откорректированных значений красной, зеленой и синей цветовых составляющих будем использовать функцию stretchlim.

correction_curves = stretchlim(truecolor);

Нарисуем корректирующие кривые.

figure
plot([0,1],[0,1],'k')
hold on
plot([0,correction_curves(:,1)',1],[0,0,1,1],'r')
plot([0,correction_curves(:,2)',1],[0,0,1,1],'g')
plot([0,correction_curves(:,3)',1],[0,0,1,1],'b')
title('Band Stretch Curves');
axis tight

 

Для улучшения изображений будем использовать сформированные корректирующие кривые.

band_stretched = imadjust(truecolor,correction_curves);

Визуализируем спектральные диапазоны преобразованного изображения.

figure
mapshow(band_stretched, R);
xlabel('Easting (meters)');
ylabel('Northing (meters)');
title({'Truecolor Composite ', 'Band Stretched'});

 

Шаг 2б: Улучшение спектральных полноцветных изображений методом кусочно–линейного растяжения.

Полноцветное изображение с сине–зеленым фоном может быть откорректировано путем кусочно–линейного преобразования (растяжения) цветовых составляющих. Такое преобразование относится к разряду табличных и характеризуется довольно большим быстродействием.

% Красная цветовая составляющая.

red_in =  [0, 35, 56, 111, 155, 191, 255];
red_out = [0, 46, 65, 109, 149, 184, 238];

% Зеленая цветовая составляющая.

green_in =  [0, 65, 100, 120, 185, 255];
green_out = [0, 60, 85,  100, 161, 237];

% Синяя составляющая не изменяется.

Визуализируем красную, зеленую и синюю корректирующие кривые.

figure
plot(red_in,red_out,'r')
hold on
plot(green_in,green_out,'g')
plot([0,255],[0,255],'b')
axis tight
title('RGB Piecewise–linear Band Stretch Curves');

 

Применим сформированные кусочно–линейные кривые для коррекции цветов полноцветного изображения.

% Преобразование красной цветовой составляющей.

piecewise_stretched(:,:,1) = mapexlincomb(truecolor(:,:,1),red_in, red_out);

% Преобразование зеленой цветовой составляющей.

piecewise_stretched(:,:,2) = mapexlincomb(truecolor(:,:,2),green_in, green_out);

% Синюю цветовую составляющую оставляем без изменений.

piecewise_stretched(:,:,3) = truecolor(:,:,3);

Визуализируем преобразованное изображение.

figure
mapshow(piecewise_stretched,R);
xlabel('Easting (meters)');
ylabel('Northing (meters)');
title({'Truecolor Composite ', 'Piecewise–linear Stretched'});

 

Шаг 3a: Яркостная балансировка цветов изображения путем растяжения контраста.

Изображение, которое получено в результате кусочно–линейных преобразований, является довольно темным. Поэтому, прежде чем проводить дальнейшие преобразования с целью улучшения визуального качества изображений, необходимо проанализировать гистограмму распределения значений интенсивностей красной, зеленой и синей цветовых составляющих.

Построим гистограммы красной, зеленой и синей цветовых составляющих.

figure;imhist(im2double(piecewise_stretched(:,:,1)));
title('Histogram of the Red Band');
figure;imhist(im2double(piecewise_stretched(:,:,2)));
title('Histogram of the Green Band');
figure;imhist(im2double(piecewise_stretched(:,:,3)));
title('Histogram of the Blue Band');

 

При улучшении изображений будем использовать ранее сформированные кривые преобразования. Из приведенных выше гистограмм видно, что основная часть всех цветовых составляющих сосредоточена в диапазоне от 0.07 до 0.45. Поэтому целесообразно растянуть именно эту часть на весь максимально возможный диапазон.

piecewise_stretch_brighten = imadjust(piecewise_stretched, [.07, .45], [0. 1.],[]);

Визуализируем изображение, которое было улучшено методом кусочно–линейного растяжения и яркостной коррекции.

figure
mapshow(piecewise_stretch_brighten,R);
xlabel('Easting (meters)');
ylabel('Northing (meters)');
title({'Truecolor Composite ', ...
       'Piecewise–linear Stretched and Brightened'});

 

Шаг 3б: Яркостная балансировка цветов изображения с применением преобразования в цветовое пространство L*a*b*.

Довольно часто для улучшения визуального качества изображения используют его представление в цветовом пространстве L*a*b*. Обрабатывая составляющую L* методом адаптивного выравнивания гистограммы, достигается улучшение яркостных характеристик изображения, которые, в свою очередь, обеспечивают повышение его контрастности.

Формирование преобразования из пространства RGB в пространство L*a*b*.

cform2lab = makecform('srgb2lab');

Применение цветовых преобразований.

LAB = applycform(piecewise_stretched, cform2lab);

Визуализация L*–составляющей.

figure
mapshow(LAB(:,:,1),R);
title('L*a*b* Color Space –– L* Band');
axis off

 

Улучшение L* – составляющей с использованием метода адаптивного выравнивания гистограммы.

LAB(:,:,1) = adapthisteq(LAB(:,:,1));
figure
mapshow(LAB(:,:,1),R);
title('L*a*b* Color Space –– L* Band Brightened');
axis off

 

Преобразование улучшенного изображения из цветового пространства L*a*b* в цветовое пространство RGB.

cform2srgb = makecform('lab2srgb');
piecewise_stretch_lab_brighten = applycform(LAB, cform2srgb);

Визуализация улучшенного изображения.

figure
mapshow(piecewise_stretch_lab_brighten,R);
xlabel('Easting (meters)');
ylabel('Northing (meters)');
title({'Truecolor Composite ', ...
       'Piecewise–linear Stretched and L*a*b* Brightened'});

 

Шаг 4a: Сравнение результатов обработки путем увеличения области интереса.

Определим область интереса.

xLim = [234580, 236560];
yLim = [900130, 901800];

Визуализируем исходное полноцветное изображение.

figure
mapshow(truecolor,R);
set(gca, 'XLim',xLim);
set(gca, 'YLim',yLim);
xlabel('Easting (meters)');
ylabel('Northing (meters)');
title({'Zoomed Truecolor Composite ', 'Original'});

 

Теперь визуализируем изображение, которое обработано методом растяжения.

figure
mapshow(band_stretched,R);
set(gca, 'XLim',xLim);
set(gca, 'YLim',yLim);
xlabel('Easting (meters)');
ylabel('Northing (meters)');
title({'Zoomed Truecolor Composite ', ...
       'Band Stretched'});

 

Также визуализируем изображение, которое было обработано методом кусочно–линейного растяжения и методом яркостной коррекции.

figure
mapshow(piecewise_stretch_brighten,R);
set(gca, 'XLim',xLim);
set(gca, 'YLim',yLim);
xlabel('Easting (meters)');
ylabel('Northing (meters)');
title({'Zoomed Truecolor Composite ', ...
       'Piecewise–linear Band Stretched'});

 

Визуализируем изображение, которое было обработано с использованием цветового пространства L*a*b*.

figure
mapshow(piecewise_stretch_lab_brighten,R);
set(gca, 'XLim',xLim);
set(gca, 'YLim',yLim);
xlabel('Easting (meters)');
ylabel('Northing (meters)');
title({'Zoomed Truecolor Composite ', ...
       'Piecewise–linear Stretched and L*a*b* Brightened'});

 

Шаг 4б: Сравнение полученных результатов путем монтажа изображений.

Для проведения анализа результатов обработки совместим обработанные части изображения следующим образом.

[rowLim, colLim] = map2pix(R, xLim, fliplr(yLim));

rowLim = round(rowLim);
colLim = round(colLim);

rows = [rowLim(1):rowLim(2)];
cols = [colLim(1):colLim(2)];

nrows = numel(rows);
ncols = numel(cols);
montage(2*nrows, 2*ncols,3) = uint8(0);
montage(1:nrows, 1:ncols,:) = truecolor(rows, cols,:);
montage(1:nrows, ncols+1:end, :) = band_stretched(rows, cols,:);
montage(nrows+1:end, 1:ncols, :) = piecewise_stretch_brighten(rows, cols,:);
montage(nrows+1:end, ncols+1:end, :) = piecewise_stretch_lab_brighten(rows, cols,:);
Save the border preference and set it to tight.
borderPref = iptgetpref('ImshowBorder');
iptsetpref('ImshowBorder', 'tight');

Визуализация изображений.

figure
imshow(montage);
text(25,25,'Original','color','cyan');
text(ncols+25,25,'Band Stretched','color','cyan');
text(25,nrows+25,'Piecewise–linear Band Stretched','color','cyan');
text(ncols+25,nrows+25,'Piecewise–linear Stretched and L*a*b* Brightened','Color','cyan');

iptsetpref('ImshowBorder', borderPref);

При подготовке материала использованы данные www.mathworks.com.


В оглавление \ К предыдущему разделу \ К следующему разделу

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика