imlincomb

Линейная комбинация изображений

Описание

пример

Z = imlincomb(K1,A1,K2,A2,...,Kn,An) вычисляет линейную комбинацию изображений, A1, A2, …, An, с весами K1, K2, …, Kn согласно:

Z = K1*A1 + K2*A2 + ... + Kn*An

пример

Z = imlincomb(K1,A1,K2,A2,...,Kn,An,K) добавляет смещение, K, к линейной комбинации:

Z = K1*A1 + K2*A2 + ... + Kn*An + K

пример

Z = imlincomb(___,outputClass) задает выходной класс Z.

Примеры

свернуть все

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

I = imread('cameraman.tif');

Масштабируйте изображение с помощью коэффициента 1,5 в линейной комбинации.

J = imlincomb(1.5,I);

Отобразите оригинальное изображение и обработанное изображение.

imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

figure
imshow(J)

Figure contains an axes object. The axes object contains an object of type image.

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

I = imread('cameraman.tif');

Создайте отфильтрованную копию lowpass изображения.

J = uint8(filter2(fspecial('gaussian'), I));

Найдите, что различие отображает и переключает нулевое значение к 128 использованиям линейной комбинации I и J.

K = imlincomb(1,I,-1,J,128); %K(r,c) = I(r,c) - J(r,c) + 128

Отобразите получившееся изображение различия.

imshow(K)

Figure contains an axes object. The axes object contains an object of type image.

Считайте два полутоновых uint8 изображения в рабочую область.

I = imread('rice.png');
J = imread('cameraman.tif');

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

K = imlincomb(1,I,1,J,'uint16');

Отобразите результат.

imshow(K,[])

Figure contains an axes object. The axes object contains an object of type image.

Этот пример показывает различие между вложенными вызовами и использующий линейные комбинации при выполнении серии арифметических операций на изображениях. Проиллюстрировать как imlincomb выполняет все арифметические операции прежде, чем обрезать результат, сравните результаты вычисления среднего значения двух массивов, X и Y, использование вложенных арифметических функций и использование imlincomb.

Создайте два массива.

X = uint8([ 255 0 75; 44 225 100]);
Y = uint8([ 50 50 50; 50 50 50 ]);

Насчитайте массивы с помощью вложенных арифметических функций. Вычислить среднее значение, возвращенное в Z(1,1), функциональный imadd добавляет 255 и 50 и обрезает результат до 255 прежде, чем передать его imdivide. Среднее значение возвращено в Z(1,1) 128.

Z = imdivide(imadd(X,Y),2)
Z = 2x3 uint8 matrix

   128    25    63
    47   128    75

В отличие от этого imlincomb выполняет сложение и деление в двойной точности и только обрезает конечный результат. Среднее значение возвращено в Z2(1,1) 153.

Z2 = imlincomb(.5,X,.5,Y)
Z2 = 2x3 uint8 matrix

   153    25    63
    47   138    75

Входные параметры

свернуть все

Отобразите коэффициенты в виде числовых скаляров.

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

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

Возместите в виде числового скаляра.

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

Выходной класс ZВ виде строкового скаляра или вектора символов, содержащего имя числового класса.

Пример: 'uint16'

Пример: "double"

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

свернуть все

Линейно объединенное изображение, возвращенное как числовой массив одного размера с A1. Если A1 islogical, затем Z double, в противном случае Z имеет тот же класс как A1.

Советы

  • При выполнении серии арифметических операций на паре изображений можно достигнуть более точных результатов, если вы используете imlincomb объединить операции, а не вложение вызывает к отдельным арифметическим функциям, такой как imadd. Когда вы вкладываете вызовы арифметических функций, и входные массивы имеют целочисленный класс, каждая функция обрезает и округляет результат прежде, чем передать его следующей функции, таким образом теряя точность в конечном результате. imlincomb вычисляет каждый элемент выхода Z индивидуально, в плавающей точке двойной точности. Если Z целочисленный массив, imlincomb элементы клипов Z это превышает область значений целочисленного типа, и округляет дробные значения.

Расширенные возможности

Смотрите также

| | | |

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