图像对象及其属性
图像 CData
注意
image 和 imagesc 命令可用于创建图像对象。图像对象是坐标区对象的子级,线条、补片、曲面和文本对象也是如此。和所有图形对象一样,您可以设置图像对象的许多属性,从而微调该对象在屏幕上的外观。与图像对象的外观相关的最重要的属性有 CData、CDataMapping、XData 和 YData。这些属性将会在这一部分以及下面的部分中加以讨论。有关图像对象的这些以及所有属性的详细信息,请参阅 image。
图像对象的 CData属性包含了数据数组。在以下命令中,h 是由 image 创建的图像对象的句柄,而且矩阵 X 和 Y 是相同的:
h = image(X); colormap(map) Y = get(h,'CData');
CData 数组的维数控制图像是使用颜色图颜色还是以 RGB 图像的形式显示。如果 CData 数组是二维的,则图像是索引图像或强度图像;在这两种情况下,图像都使用颜色图颜色进行显示。如果另一方面,CData 数组是 m×n×3,则该数组显示为真彩色图像,而忽略颜色图颜色。
图像 CDataMapping
CDataMapping 属性可用于控制图像是 indexed 还是 intensity。要显示索引图像,请将 CDataMapping 属性设置为 'direct',从而使 CData 数组的值直接用作图窗颜色图的索引。当 image 命令与单个输入参量配合使用时,该命令将 CDataMapping 的值设置为 'direct':
h = image(X); colormap(map) get(h,'CDataMapping') ans = direct
通过将 CDataMapping 属性设置为 'scaled' 来显示强度图像。在这种情况下,CData 值经过线性缩放来形成颜色图索引。坐标区的 CLim 属性可用于控制缩放因子。imagesc 函数可创建一个 CDataMapping 属性设置为 'scaled' 的图像对象,而且该函数可调整父坐标区的 CLim 属性。例如:
h = imagesc(I,[0 1]); colormap(map) get(h,'CDataMapping') ans = scaled get(gca,'CLim') ans = [0 1]
XData 和 YData
XData 和 YData 属性可用于控制图像的坐标系。对于 m×n 的图像而言,默认的 XData 是 [1 n],而默认的 YData 是 [1 m]。这些设置表明以下内容:
图像左列的 x 坐标为 1。
图像右列的 x 坐标为 n。
图形顶行的 y 坐标为 1。
图像底行的 y 坐标为 m。
图像的坐标系
使用默认坐标系
使用默认坐标系显示图像。使用 colorcube 图中的颜色。
C = [1 2 3 4; 5 6 7 8; 9 10 11 12]; im = image(C); colormap(colorcube)

指定坐标系
显示图像并指定坐标系。使用 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)

在图像数据上添加文本
此示例说明如何使用数组索引将文本光栅化到现有图像。
使用 text 函数在坐标区中绘制文本。随后,使用 getframe 命令从屏幕上捕获文本并关闭图窗。
fig = figure; t = text(.05,.1,'Mandrill Face','FontSize',20, ... 'FontWeight','bold','Color',[0 0 0]); F = getframe(gca,[10 10 200 200]); close(fig)
选择由 getframe 返回所得的 RGB 图像的任意平面。找到黑色像素(黑色是 0)并使用 sub2ind 将它们的下标转换为索引。使用这些下标将文本“刷”到 mandrill MAT 文件所包含的图像中。利用该图像的大小,加上文本的行位置和列位置来确定新图像的位置。对新图像建立索引,取代像素。
c = F.cdata(:,:,1);
[i,j] = find(c==0);
load mandrill
ind = sub2ind(size(X),i,j);
X(ind) = uint8(255);使用 bone 颜色图显示新图像。
imagesc(X)
colormap bone
快速更新图像的其他技术
要提高图像对象的 CData 属性的更新速度,则优化 CData 并设置一些相关的图窗和坐标区属性:
尽可能使用最小的数据类型。对图像使用
uint8数据类型比使用double数据类型更快。设置图像
CData属性过程包括复制矩阵用于图像。矩阵的总体大小依赖于单个元素的大小。使用更小的单个元素(即更小的数据类型)将会减小矩阵大小,并减少复制矩阵所需的总时间。使用最小可接受的矩阵。
如果图像显示速度处于最高优先级,那么您可能需要牺牲图像的大小和质量。再次强调,减小尺寸会减少复制矩阵所需的时间。
将坐标区的范围模式属性(
XLimMode和YLimMode)设置为manual。如果它们设置为
auto,则每当有对象(例如图像、线条、补片等)改变了自身的某些数据时,坐标区都必须重新计算相关的属性。例如,如果指定image(firstimage); set(gca, 'xlimmode','manual',... 'ylimmode','manual',... 'zlimmode','manual',... 'climmode','manual',... 'alimmode','manual');
重绘图像前,坐标区并不重新计算任何一个范围值。
如果您的主要任务只是在屏幕上显示一系列图像,则考虑使用
movie对象。MATLAB®
movie对象直接利用基本系统图形资源,而不会执行 MATLAB 对象代码。这比重复设置图像的CData属性更快,如上所述。