今天,我们来讲解下Matlab中可以把数据转换为图片的函数,共计两篇。本文,我们将使用image函数来将数据转换为图片。文中,我们主要给出image函数的常见用法、语法说明、显示矩阵数据的图像、控制图像位置、显示三维真彩色数组的图像、创建后修改图像、读取并显示 JPEG 图像文件、向三维视图中的坐标区添加图像等用法。
下面,我们首先给出Matlab中关于image函数的帮助文档如下:
>> help image image Display image from array image(C) displays the data in array C as an image. Each element of C specifies the color for 1 pixel of the image. The resulting image is an m-by-n grid of pixels where m is the number of columns and n is the number of rows in C. The row and column indices of the elements determine the centers of the corresponding pixels. When C is a 2-dimensional m-by-n matrix, the elements of C are used as indices into the current COLORMAP to determine the color. The value of the image object's CDataMapping property determines the method used to select a colormap entry. For 'direct' CDataMapping (the default), values in C are treated as colormap indices (1-based if double, 0-based if uint8 or uint16). For 'scaled' CDataMapping, values in C are first scaled according to the axes CLim and then the result is treated as a colormap index. When C is a 3-dimensional m-by-n-by-3 matrix, the elements in C(:,:,1) are interpreted as red intensities, in C(:,:,2) as green intensities, and in C(:,:,3) as blue intensities, and the CDataMapping property of image is ignored. For matrices containing doubles, color intensities are on the range [0.0, 1.0]. For uint8 and uint16 matrices, color intensities are on the range [0, 255]. image(C) places the center of element C(1,1) at (1,1) in the axes, and the center of element (M,N) at (M,N) in the axes, and draws each rectilinear patch as 1 unit in width and height. As a result, the outer extent of the image occupies [0.5 N+0.5 0.5 M+0.5] of the axes, and each pixel center of the image lies at integer coordinates ranging between 1 and M or N. image(x,y,C) specifies the image location. Use x and y to specify the locations of the corners corresponding to C(1,1) and C(m,n). To specify both corners, set x and y as two-element vectors. To specify the first corner and let image determine the other, set x and y as scalar values. The image is stretched and oriented as applicable. image('CData',C) adds the image to the current axes without replacing existing plots. This syntax is the low-level version of image(C). image('XData',x,'YData',y,'CData',C) specifies the image location. This syntax is the low-level version of image(x,y,C). image(...,Name,Value) specifies image properties using one or more Name,Value pair arguments. You can specify image properties with any of the input argument combinations in the previous syntaxes. image(container,...) creates the image in the axes, group, or transform specified by container, instead of in the current axes. IM = image(...) returns the image object created. Use im to set properties of the image after it is created. You can specify this output with any of the input argument combinations in the previous syntaxes. When called with C or X,Y,C, image sets the axes limits to tightly enclose the image, sets the axes YDir property to 'reverse', and sets the axes View property to [0 90]. Execute GET(IM), where IM is an image object, to see a list of image object properties and their current values. Execute SET(IM) to see a list of image object properties and legal property values.
常见用法
image(C) image(x,y,C) image('CData',C) image('XData',x,'YData',y,'CData',C) image(___,Name,Value) image(ax,___) im = image(___)
语法说明
image(C) 会将数组 C 中的数据显示为图像。C 的每个元素指定图像的 1 个像素的颜色。生成的图像是一个 m×n 像素网格,其中 m 和 n 分别是 C 中的行数和列数。这些元素的行索引和列索引确定了对应像素的中心。
image(x,y,C) 指定图像位置。使用 x 和 y 可指定与 C(1,1) 和 C(m,n) 对应的边角的位置。要同时指定两个边角,请将 x 和 y 设置为二元素向量。要指定第一个边角并让 image 确定另一个,请将 x 和 y 设为标量值。图像将根据需要进行拉伸和定向。
image(‘CData’,C) 将图像添加到当前坐标区中而不替换现有绘图。此语法是 image(C) 的低级版本。有关详细信息,请参阅图像的高级与低级版本。
image(‘XData’,x,’YData’,y,’CData’,C) 指定图像位置。此语法是 image(x,y,C) 的低级版本。
image(_,Name,Value) 使用一个或多个名称-值对组参数指定图像属性。您可以使用先前语法中的任意输入参数组合指定图像属性。
image(ax,_) 将在由 ax 指定的坐标区中而不是当前坐标区 (gca) 中创建图像。选项 ax 可以位于前面的语法中的任何输入参数组合之前。
im = image(_) 返回创建的 Image 对象。使用 im 在创建图像后设置图像的属性。您可以使用先前语法中的任意输入参数组合指定此输出。
显示矩阵数据的图像
创建矩阵 C。显示 C 中数据的图像。向图形添加颜色栏以显示当前颜色图。
C = [0 2 4 6; 8 10 12 14; 16 18 20 22]; image(C) colorbar
默认情况下,图像的 CDataMapping 属性设置为 ‘direct’,因此 image 会将 C 中的值解释为颜色图的索引。例如,与 C 中最后一个元素 (22) 对应的右下方像素使用颜色图的第 22 个颜色。
通过在创建图像时将 CDataMapping 属性设置为 ‘scaled’,将值的范围缩放到当前颜色图的完整范围。
image(C,'CDataMapping','scaled') colorbar
您也可以使用 imagesc 函数缩放这些值,而不是使用 image(C,’CDataMapping’,’scaled’)。例如,使用 imagesc(C)。
控制图像位置
放置图像,使其位于 x 轴上的 5 和 8 之间及 y 轴上的 3 和 6 之间。
x = [5 8]; y = [3 6]; C = [0 2 4 6; 8 10 12 14; 16 18 20 22]; image(x,y,C)
请注意,对应于 C(1,1) 的像素居中显示在点 (5,3) 上。对应于 C(3,4) 的像素在点 (8,6) 上居中显示。image 在这两个点之间定位和定向该图像的其余部分。
显示三维真彩色数组的图像
创建 C 作为真彩色三维数组。将该数组的最后两页设为零,以便仅使用红色。
C = zeros(3,3,3); C(:,:,1) = [.1 .2 .3; .4 .5 .6; .7 .8 .9]
C = C(:,:,1) = 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 C(:,:,2) = 0 0 0 0 0 0 0 0 0 C(:,:,3) = 0 0 0 0 0 0 0 0 0
显示 C 中数据的图像。
image(C)
创建后修改图像
绘制一个线条,然后在该线条上方创建一个图像。返回图像对象。
plot(1:3) hold on C = [1 2 3; 4 5 6; 7 8 9]; im = image(C);
使图像半透明,这样线条就会在图像中透明呈现。
im.AlphaData = 0.5;
读取并显示 JPEG 图像文件
读取 JPEG 图像文件。
C = imread('ngc6543a.jpg');
imread 返回 650×600×3 数组 C。
显示图像。
image(C)
向三维视图中的坐标区添加图像
创建一个曲面图。然后,在曲面下添加一个图像。image 在 xy 平面中显示该图像。
Z = 10 + peaks; surf(Z) hold on image(Z,'CDataMapping','scaled')
最后,我这里要提一下image基本生成图片方法。把一个三维矩阵分别对应RGB三个颜色基准,自动合并每个元素上的颜色,得到图片,具体可以参考之前我的一篇说明:《Matlab图像灰度转换函数rgb2gray》以及《Matlab图像读取函数imread用法介绍》。
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/2187.html