| Image Processing Toolbox | ![]() |
Compute linear combination of images
Syntax
Z = imlincomb(K1,A1,K2,A2,...,Kn,An) Z = imlincomb(K1,A1,K2,A2,...,Kn,An,K) Z = imlincomb(..., output_class)
Description
Z = imlincomb(K1,A1,K2,A2,...,Kn,An)
computes:
where K1, K2, through Kn are real, double scalars and A1, A2, through An are real, nonsparse, numeric arrays with the same class and size. Z has the same class and size as A1.
Z = imlincomb(K1,A1,K2,A2,...,Kn,An,K) computes:
where imlincomb adds K, a real, double scalar, to the sum of the products of K1 through Kn and A1 through An.
Z = imlincomb(...,output_class) lets you specify the class of Z. output_class is a string containing the name of a numeric class.
Example
Scale an image by a factor of two.
Form a difference image with the zero value shifted to 128.
I = imread('cameraman.tif'); J = uint8(filter2(fspecial('gaussian'), I)); K = imlincomb(1,I,-1,J,128); % K(r,c) = I(r,c) - J(r,c) + 128 imshow(K)
To illustrate how imlincomb performs all the arithmetic operations before truncating the result, compare the results of calculating the average of two arrays, X and Y, using nested arithmetic functions and then using imlincomb.
Consider the values in row 1, column 1: 255 in the X and 50 in Y. In the version that uses nested arithmetic functions, imadd adds 255 and 50 and truncates the result to 255 before passing it to imdivide. The average returned in Z(1,1) is 128.
X = uint8([ 255 10 75; 44 225 100]); Y = uint8([ 50 20 50; 50 50 50 ]); Z = imdivide(imadd(X,Y),2) Z = 128 15 63 47 128 75
imlincomb performs the addition and division in double precision and only truncates the final result. The average returned in Z2(1,1) is 153.
Form a difference image with the zero value shifted to 128.
I = imread('cameraman.tif'); J = uint8(filter2(fspecial('gaussian'), I)); K = imlincomb(1,I,-1,J,128); % K(r,c) = I(r,c) - J(r,c) + 128 imshow(K)
See Also
imadd, imcomplement, imdivide, immultiply, imsubtract
| imimposemin | immovie | ![]() |