exponenta event banner

decorrstretch

Применение растяжения декорреляции к многоканальному изображению

Описание

S = decorrstretch(A) применяет растягивание декорреляции к RGB или многоспектральному изображению A и возвращает результат в S. Среднее значение и дисперсия в каждой полосе S те же, что и в A.

Основной целью декорреляционного растяжения является визуальное улучшение. Растягивание декорреляции - это способ улучшить цветовые различия изображения.

пример

S = decorrstretch(A,Name,Value) использует пары имя-значение для управления аспектами растяжения декорреляции, такими как целевое среднее и стандартное отклонение каждой полосы.

Примеры

свернуть все

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

Чтение изображения в рабочую область.

[X, map] = imread('forest.tif');

Применение декорреляционного растяжения с помощью decorrstretch.

S = decorrstretch(ind2rgb(X,map),'tol',0.01);

Отображение исходного изображения и улучшенного изображения.

figure
imshow(X,map)
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

figure
imshow(S)
title('Enhanced Image')

Figure contains an axes. The axes with title Enhanced Image contains an object of type image.

Входные аргументы

свернуть все

Изображение, которое должно быть расширено, указано как изображение RGB или многоспектральное изображение размером m-by-n-by-nBands. Для образа RGB: nBands = 3.

Типы данных: single | double | int16 | uint8 | uint16

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'Mode','covariance'

Метод декорреляции, указанный как разделенная запятыми пара, состоящая из 'Mode' и следующих значений.

  • 'correlation' - использует собственное разложение матрицы корреляции «полоса-полоса».

  • 'covariance' - использует собственное разложение ковариационной матрицы «полоса-полоса».

Типы данных: char | string

Целевые средние значения выходных диапазонов, определяемые как разделенная запятыми пара, состоящая из 'TargetMean' и действительный скаляр или вектор длины nBands. По умолчанию TargetMean является 1-by-nBands вектор, содержащий выборочное среднее для каждой полосы, который сохраняет полосовое средство до и после растяжения декорреляции.

TargetMean должен иметь класс double, но использует те же значения, что и пикселы во входном изображении. Например, если A является классом uint8, то 127.5 было бы разумной стоимостью. Если значения должны быть привязаны к стандартному диапазону класса изображений ввода/вывода, это может повлиять на результаты.

Типы данных: double

Целевые значения среднеквадратического отклонения выходных полос, указанные как пара, разделенная запятыми, состоящая из 'TargetSigma' и положительный скаляр или вектор длины nBands. По умолчанию TargetSigma является 1-by-nBands вектор, содержащий стандартное отклонение выборки каждой полосы, которое сохраняет дисперсию полосы до и после растяжения декорреляции. Целевое стандартное отклонение игнорируется для однородных (с нулевой дисперсией) полос.

TargetSigma должен быть классом double, но использует те же значения, что и пикселы во входном изображении. Например, если A имеет класс uint8, то 50.0 было бы разумной стоимостью.

Типы данных: double

Линейное контрастное растяжение после растяжения декорреляции, указанное как пара, разделенная запятыми, состоящая из 'Tol' и числовой скалярный или 2-элементный числовой вектор класса double. Задание значения Tol переопределяет значение TargetMean или TargetSigma. Если не указать Tol, то по умолчанию decorrstretch не выполняет линейного контрастного растяжения.

Tol имеет то же значение, что и в stretchlim, где Tol = [LOW_FRACT HIGH_FRACT] задает долю насыщаемого изображения при низкой и высокой интенсивностях. При указании Tol как скалярное значение, то LOW_FRACT = Tol и HIGH_FRACT = 1 - Tolнасыщение равных фракций при низкой и высокой интенсивностях.

Небольшие корректировки Tol может сильно повлиять на внешний вид выходных данных.

Типы данных: double

Подмножество A используется для вычисления диапазона, ковариации и корреляции, заданных как массив ячеек, содержащий два массива пиксельных подстрочных кодов {rowsubs, colsubs}. rowsubs и colsubs - векторы или матрицы совпадающего размера, содержащие подстрочные значения строк и столбцов соответственно.

Используйте эту опцию, чтобы уменьшить количество вычислений, чтобы предотвратить влияние недопустимых или нерепрезентативных пикселов на преобразование или и то, и другое. Например, можно использовать rowsubs и colsubs для исключения областей облачности. Если не указано, decorrstretch использует все пикселы в A.

Типы данных: double

Выходные аргументы

свернуть все

Растянутое изображение декорреляции, возвращаемое в виде числового массива того же размера и класса, что и входное изображение, A.

Совет

  • Результаты прямой декорреляции (без опции контрастного растяжения) могут включать значения, выходящие за пределы числового диапазона, поддерживаемого классом uint8 или uint16 (отрицательные значения или значения, превышающие 255 или 65535соответственно). В этих случаях decorrstretch закрепляет его выход в поддерживаемом диапазоне.

  • Для класса double, decorrstretch зажимает выходные данные только в том случае, если указано значение для Tol, задание линейного контрастного растяжения с последующим прижимом к интервалу [0 1].

  • Необязательные параметры не взаимодействуют, за исключением того, что линейное растяжение обычно изменяет как полосовые средства, так и полосовые стандартные отклонения. Таким образом, пока можно указать TargetMean и TargetSigma вместе с Tolих эффекты будут изменены.

Алгоритмы

Растягивание декорреляции - это линейная пиксельная операция, в которой конкретные параметры зависят от значений фактической и желаемой (целевой) статистики изображения. Вектор a содержит значение заданного пикселя в каждой полосе входного изображения A преобразуется в соответствующий пиксель b в выходном изображении B следующим образом:

b = T * (a - m) + m_target.

a и b являются nBands-по-1 векторам, T является nBandsоколо-nBands матрица, и m и m_target являются nBands-по-1 векторы, такие, что

  • m содержит среднее значение каждой полосы в изображении или в подмножестве пикселей изображения, которые вы указываете

  • m_target содержит требуемое выходное среднее в каждой полосе. Выбор по умолчанию: m_target = m.

Матрица линейного преобразования T зависит от следующего:

  • Ковариация межполосной выборки изображения или указанного подмножества изображения (то же подмножество, что и для m), представленный матрицей Cov

  • Требуемое выходное стандартное отклонение в каждой полосе. Это удобно представлено диагональной матрицей, SIGMA_target. Выбор по умолчанию: SIGMA_target = SIGMA, где SIGMA - диагональная матрица, содержащая стандартное отклонение выборки для каждой полосы. SIGMA должны вычисляться из тех же пикселов, которые использовались для m и Cov, что означает просто, что:

    SIGMA(k,k) = sqrt(Cov(k,k), k = 1,..., nBands).

Cov, SIGMA, и SIGMA_target являются nBandsоколо-nBands, как и матрицы Corr, LAMBDA, и V, определено ниже.

Первый шаг в вычислениях T должен выполнить собственное разложение любой из ковариационных матриц Cov или корреляционная матрица

Corr = inv(SIGMA) * Cov * inv(SIGMA).

  • В основанном на корреляции методе Corr разлагается: Corr = V LAMBDA V'.

  • В ковариационном методе, Cov разлагается: Cov = V LAMBDA V'.

LAMBDA - диагональная матрица собственных значений и V - ортогональная матрица, преобразующая Corr или Cov кому LAMBDA.

Следующим шагом является вычисление коэффициента растяжения для каждой полосы, который является обратным квадратным корнем соответствующего собственного значения. Удобно определить диагональную матрицу S содержащие факторы растяжения, такие, что:

S(k,k) = 1 / sqrt(LAMBDA(k,k)).

Наконец, матрица T вычисляется из одного

T = SIGMA_target V S V' inv(SIGMA) (метод на основе корреляции)

или

T = SIGMA_target V S V' (ковариационный метод).

Эти два метода дают идентичные результаты, если дисперсии полос одинаковы.

Замена T в выражение для b:

b = m_target + SIGMA_target V S V' inv(SIGMA) * (a - m)

или

b = m_target + SIGMA_target V S V' * (a - m)

и чтение справа налево, можно увидеть, что декорреляция растягивается:

  1. Удаляет среднее значение из каждой полосы

  2. Нормализует каждую полосу по ее стандартному отклонению (только метод на основе корреляции)

  3. Поворачивает полосы в собственное пространство Corr или Cov

  4. Применение растяжения S в собственном пространстве, оставляя изображение декоррелированным и нормализованным в собственном пространстве

  5. Поворот назад к исходному диапазону-пространству, где полосы остаются декоррелированными и нормализованными

  6. Масштабирует каждую полосу в соответствии с SIGMA_target

  7. Восстанавливает среднее значение в каждой полосе.

См. также

|

Представлен до R2006a