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. The axes contains an object of type image.

figure
imshow(J)

Figure contains an axes. The axes 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. The axes 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. The axes 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 является logical, затем Z является double, в противном случае Z имеет тот же класс, что и A1.

Совет

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

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

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