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áficas, 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)
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)
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
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 datosdouble
.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
yYLimMode
) de sus ejes enmanual
.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 especificaimage(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 propiedadCData
de la imagen, como se ha descrito anteriormente.