Matlab使用image函数将数据转换为图片

4
(2)

今天,我们来讲解下Matlab中可以把数据转换为图片的函数,共计两篇。本文,我们将使用image函数来将数据转换为图片。文中,我们主要给出image函数的常见用法、语法说明、显示矩阵数据的图像、控制图像位置、显示三维真彩色数组的图像、创建后修改图像、读取并显示 JPEG 图像文件、向三维视图中的坐标区添加图像等用法。

Matlab使用image函数将数据转换为图片

下面,我们首先给出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
Matlab使用image函数将数据转换为图片

默认情况下,图像的 CDataMapping 属性设置为 ‘direct’,因此 image 会将 C 中的值解释为颜色图的索引。例如,与 C 中最后一个元素 (22) 对应的右下方像素使用颜色图的第 22 个颜色。

通过在创建图像时将 CDataMapping 属性设置为 ‘scaled’,将值的范围缩放到当前颜色图的完整范围。

image(C,'CDataMapping','scaled')
colorbar
Matlab使用image函数将数据转换为图片

您也可以使用 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)
Matlab使用image函数将数据转换为图片

请注意,对应于 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)
Matlab使用image函数将数据转换为图片

创建后修改图像

绘制一个线条,然后在该线条上方创建一个图像。返回图像对象。

plot(1:3)
hold on
C = [1 2 3; 4 5 6; 7 8 9];
im = image(C);
Matlab使用image函数将数据转换为图片

使图像半透明,这样线条就会在图像中透明呈现。

im.AlphaData = 0.5;
Matlab使用image函数将数据转换为图片

读取并显示 JPEG 图像文件

读取 JPEG 图像文件。

C = imread('ngc6543a.jpg');

imread 返回 650×600×3 数组 C。

显示图像。

image(C)
Matlab使用image函数将数据转换为图片

向三维视图中的坐标区添加图像

创建一个曲面图。然后,在曲面下添加一个图像。image 在 xy 平面中显示该图像。

Z = 10 + peaks;
surf(Z)
hold on 
image(Z,'CDataMapping','scaled')
Matlab使用image函数将数据转换为图片

最后,我这里要提一下image基本生成图片方法。把一个三维矩阵分别对应RGB三个颜色基准,自动合并每个元素上的颜色,得到图片,具体可以参考之前我的一篇说明:《Matlab图像灰度转换函数rgb2gray》以及《Matlab图像读取函数imread用法介绍》。

共计2人评分,平均4

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/articles/2187.html

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2021年03月22日 20:52
下一篇 2021年03月24日 20:45

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号