exponenta event banner

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');

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

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