Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

imlincomb

Combinación lineal de imágenes

Sintaxis

Z = imlincomb(K1,A1,K2,A2,...,Kn,An)
Z = imlincomb(K1,A1,K2,A2,...,Kn,An,K)
Z = imlincomb(___,output_class)
gpuarrayZ = imlincomb(gpuarrayK,gpuarrayA,___,output_class)

Descripción

Z = imlincomb(K1,A1,K2,A2,...,Kn,An) Calcula

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

donde K1, K2, a través de Kn son escalares reales, dobles y A1, A2, a través de An son reales, no Sparse, matrices numéricas con la misma clase y tamaño. Z tiene la misma clase y tamaño que A1 a menos que A1 sea lógico, en cuyo caso Z es doble.

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

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

donde imlincomb añade K, un real, doble escalar, a la suma de los productos de K1 a través de Kn y A1 a través de An.

Z = imlincomb(___,output_class) permite especificar la clase de Z. output_class es un vector de cadena escalar o carácter que contiene el nombre de una clase numérica.

gpuarrayZ = imlincomb(gpuarrayK,gpuarrayA,___,output_class) realiza la operación en una GPU, donde los valores de entrada,gpuarrayK y gpuarrayA, son gpuArrays y el valor de salida, gpuarrayZ es un gpuArray. Esta sintaxis requiere el Parallel Computing Toolbox™

Al realizar una serie de operaciones aritméticas en un par de imágenes, puede obtener resultados más precisos si utiliza imlincomb para combinar las operaciones, en lugar de las llamadas de anidación a las funciones aritméticas individuales, como imadd. Al anidar llamadas a las funciones aritméticas, y las matrices de entrada son de una clase entera, cada función trunca y redondea el resultado antes de pasarlo a la siguiente función, perdiendo así la precisión en el resultado final. imlincomb computa cada elemento de la salida Z individualmente, en punto flotante de la doble-precisión. Si Z es una matriz de enteros, imlincomb trunca los elementos de Z que exceden el rango del tipo entero y redondea los valores fraccionarios.

Ejemplos

contraer todo

Lee una imagen en el espacio de trabajo.

I = imread('cameraman.tif');

Escale la imagen utilizando un coeficiente de 1,5 en la combinación lineal.

J = imlincomb(1.5,I);

Mostrar la imagen original y la imagen procesada.

imshow(I)

figure imshow(J)

Lee una imagen en el espacio de trabajo.

I = imread('cameraman.tif');

Cree una copia filtrada de paso bajo de la imagen.

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

Encuentre la imagen de diferencia y cambie el valor cero a 128 usando una combinación lineal de I y J.

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

Mostrar la imagen de diferencia resultante.

imshow(K)

Lea dos imágenes uint8 en escala de grises en el espacio de trabajo.

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

Añada las imágenes mediante una combinación lineal. Especifique la salida como tipo uint16 para evitar truncar el resultado.

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

Mostrar el resultado.

imshow(K,[])

Lea dos imágenes uint8 en escala de grises en el espacio de trabajo y conviertalos a gpuArrays.

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

Añada las imágenes utilizando una combinación lineal en una GPU. Especifique la salida como tipo uint16 para evitar truncar el resultado.

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

Mostrar el resultado.

figure imshow(K,[]) 

Este ejemplo muestra la diferencia entre las llamadas de anidación y el uso de combinaciones lineales al realizar una serie de operaciones aritméticas en imágenes. Para ilustrar cómo imlincomb realiza todas las operaciones aritméticas antes de truncar el resultado, compare los resultados del cálculo del promedio de dos matrices, X y Y, utilizando funciones aritméticas anidadas y utilizando imlincomb.

Crear dos matrices.

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

Promediar las matrices mediante funciones aritméticas anidadas. Para calcular el promedio devuelto en Z(1,1), la función imadd agrega 255 y 50 y trunca el resultado a 255 antes de pasarlo a imdivide. El promedio devuelto en Z(1,1) es 128.

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

   128    25    63
    47   128    75

Por el contrario, imlincomb realiza la suma y la división en doble precisión y sólo trunca el resultado final. El promedio devuelto en Z2(1,1) es 153.

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

   153    25    63
    47   138    75

Capacidades ampliadas

Introducido antes de R2006a