imlincomb

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

Синтаксис

Z = imlincomb(K1,A1,K2,A2,...,Kn,An)
Z = imlincomb(K1,A1,K2,A2,...,Kn,An,K)
Z = imlincomb(___,outputClass)

Описание

пример

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

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

Опционально можно вычислить линейную комбинацию с помощью графического процессора (требует Parallel Computing Toolbox™). Для получения дополнительной информации смотрите Обработку изображений на графическом процессоре.

пример

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
imshow(J)

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

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)

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

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

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

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

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

imshow(K,[])

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

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

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

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

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

figure
imshow(K,[])

Этот пример показывает различие между вложенными вызовами и использующий линейные комбинации при выполнении серии арифметических операций на изображениях. Чтобы проиллюстрировать, как 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

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

свернуть все

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

Чтобы вычислить линейную комбинацию с помощью графического процессора, задайте коэффициенты изображений как gpuArray s, что каждый содержит числовой скаляр.

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

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

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

Сместите, заданный в виде числа.

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

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

Пример: 'uint16'

Пример: "double"

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

свернуть все

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

Если линейная комбинация вычисляется с помощью графического процессора, то Z возвращен как gpuArray, содержащий числовой массив.

Советы

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

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

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

| | | |

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