Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

El objeto de imagen y sus propiedades

CData de la imagen

Nota

Los comandos image y imagesc crean objetos de imagen. Los objetos de imagen son elementos secundarios de los objetos de ejes, como lo son los objetos de línea, parche, superficie y texto. Al igual que todos los objetos de gráficos, el objeto de imagen tiene un número de propiedades que puede configurar para ajustar su apariencia en la pantalla. Las propiedades más importantes del objeto de imagen con respecto a la apariencia son CData, CDataMapping, XData y YData. Estas propiedades se analizan en esta y en las siguientes secciones. Para obtener información detallada acerca de estas y todas las propiedades del objeto de imagen, consulte image.

La propiedad CData de un objeto de imagen contiene el arreglo de datos. En los siguientes comandos, h es el identificador del objeto de imagen creado por image y las matrices X y Y son las mismas:

h = image(X); colormap(map)
Y = get(h,'CData');

La dimensionalidad del arreglo de CData controla si la imagen se muestra utilizando los colores del mapa de colores o como una imagen RGB. Si el arreglo de CData es de dos dimensiones, la imagen es una imagen indexada o una imagen de intensidad. En cualquier caso, la imagen se muestra utilizando los colores del mapa de colores. Si, por otra parte, el arreglo de CData es de m por n por 3, muestra una imagen de color real, ignorando los colores del mapa de colores.

Asignación de CData de la imagen

La propiedad CDataMapping controla si una imagen es indexed o intensity. Para mostrar una imagen indexada configure la propiedad CDataMapping en 'direct', de tal manera que los valores del arreglo CData se utilizan directamente como índices en el mapa de colores de la figura. Cuando el comando image se utiliza con un solo argumento de entrada, configura el valor de CDataMapping en 'direct':

h = image(X); colormap(map)
get(h,'CDataMapping')
ans =

direct

Las imágenes de intensidad se muestran al configurar la propiedad CDataMapping en 'scaled'. En este caso, los valores CData escalan de manera lineal para formar índices del mapa de colores. La propiedad CLim de los ejes controla los factores de escala. La función imagesc crea un objeto de imagen cuya propiedad CDataMapping se configura en 'scaled' y ajusta la propiedad CLim de los ejes principales. Por ejemplo:

h = imagesc(I,[0 1]); colormap(map)
get(h,'CDataMapping')
ans =

scaled

get(gca,'CLim')
ans =

[0 1]

XData e YData

Las propiedades de XData y YData controlan el sistema de coordinación de la imagen. Para una imagen m por n, el valor predeterminado de XData es [1 n] y el valor predeterminado de YData es [1 m]. Esta configuración implica lo siguiente:

  • La columna de la izquierda de la imagen tiene una coordenada x de 1.

  • La columna de la derecha de la imagen tiene una coordenada x de n.

  • La fila superior de la imagen tiene una coordenada y de 1.

  • La fila inferior de la imagen tiene una coordenada y de m.

Coordinar el sistema para las imágenes

Utilizar el sistema de coordenadas predeterminado

Muestre una imagen utilizando el sistema de coordenadas predeterminado. Utilice los colores del mapa colorcube.

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
im = image(C);
colormap(colorcube)

Figure contains an axes. The axes contains an object of type image.

Especificar el sistema de coordenadas

Muestre una imagen y especifique el sistema de coordenadas. Utilice los colores del mapa colorcube.

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
x = [-1 2];
y = [2 4];
figure
image(x,y,C) 
colormap(colorcube)

Figure contains an axes. The axes contains an object of type image.

Agregar texto a los datos de imágenes

Este ejemplo muestra cómo utilizar un arreglo indexando para rasterizar texto en una imagen existente.

Represente el texto en los ejes con la función text. A continuación, capture el texto de la pantalla con getframe y cierre la figura.

fig = figure;
t = text(.05,.1,'Mandrill Face','FontSize',20,'FontWeight','bold');
F = getframe(gca,[10 10 200 200]);
close(fig)

Seleccione cualquier plano de la imagen RGB resultante devuelta por getframe. Encuentre los píxeles que sean negros (el negro es 0) y convierta sus subíndices en índices con sub2ind. Utilice estos subíndices para "pintar" el texto en la imagen contenida en el archivo MAT mandrill. Utilice el tamaño de esa imagen, más las ubicaciones del texto de la fila y la columna para determinar las ubicaciones en la nueva imagen. Indexe en la nueva imagen, sustituyendo los píxeles.

c = F.cdata(:,:,1);
[i,j] = find(c==0);
load mandrill
ind = sub2ind(size(X),i,j);
X(ind) = uint8(255);

Muestre la nueva imagen con el mapa de colores de hueso.

imagesc(X)
colormap bone

Figure contains an axes. The axes contains an object of type image.

Técnicas adicionales para una actualización rápida de imágenes

Para aumentar la frecuencia a la que la propiedad CData de un objeto de imagen actualiza, optimice CData y configure algunas propiedades relacionadas con los ejes y la figura:

  • Utilice el tipo de datos más pequeño posible. Utilizar un tipo de datos uint8 para su imagen será más rápido que utilizar un tipo de datos double.

    Parte del proceso de establecer la propiedad CData de la imagen incluye copiar la matriz para la utilización de la imagen. El tamaño general de la matriz depende del tamaño de sus elementos individuales. Utilizar elementos individuales más pequeños (es decir, un tipo de datos más pequeño) reduce el tamaño de la matriz y reduce la cantidad de tiempo necesario para copiar la matriz.

  • Utilice la matriz aceptable más pequeña.

    Si la velocidad a la que se muestra la imagen es su mayor prioridad, puede que tenga que comprometer el tamaño y la calidad de la imagen. Nuevamente, la reducción del tamaño, reduce el tiempo necesario para copiar la matriz.

  • Configure las propiedades del modo límite (XLimMode y YLimMode) de sus ejes en manual.

    Si están configuradas en auto, cada vez que un objeto (como una imagen, línea, parche, etc.) cambie algún aspecto de sus datos, los ejes deben volver a calcular sus propiedades relacionadas. Por ejemplo, si especifica

    image(firstimage);
    set(gca, 'xlimmode','manual',...
    'ylimmode','manual',...
    'zlimmode','manual',...
    'climmode','manual',...
    'alimmode','manual');
    

    no vuelva a calcular ninguno de los valores límite antes de volver a dibujar la imagen.

  • Considere utilizar un objeto movie si el punto principal de su tarea es simplemente mostrar una serie de imágenes en pantalla.

    El objeto MATLAB® movie utiliza recursos gráficos del sistema subyacente de manera directa, en vez de ejecutar el código de objeto MATLAB. Esto es más rápido que configurar de forma repetida una propiedad CData de la imagen, como se ha descrito anteriormente.