• matlab画图常用函数image、imagesc、imshow区别


    1、image函数

    数组显示图像,直接把矩阵中的值当作索引值(称为直接映射),即数值1对应RGB1,数值2对应于RGB2,当小于1或大于64时表现为两端的颜色。

    语法1:image(c), 会将数组 C 中的数据显示为图像,C 的每个元素指定图像的 1 个像素的颜色。

    案例1:

    >> N=randi([0,255],6,6)   %产生随机矩阵
    N =
       177   195   181    30   192   140
        81   203   193   127    65    35
       243    47    70   245   129    38
         8   125   174    87   178    65
       112   114   167   149   228   215
        97   165    41    57   245    65
    >> image(N)   %画图
    >> colorbar   %加右侧的条带
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    可以看出,下面多数元素是黄色,这是因为colorbar的范围为(0,64),大于等于64的均为黄色,接近于0 的偏向蓝色。在这里插入图片描述
    若想要让colorbar的范围正好是矩阵极限值的范围,这样不同的像素值都能展现不同的颜色,而不是大于等于64的均为黄色。

    语法2:默认情况下,图像的 CDataMapping 属性设置为 ‘direct’,(可以简单理解为,colorbar的范围默认情况是(0,64),矩阵数值范围仅限于这个范围时,才能展现不同颜色)
    将 CDataMapping 属性设置为 ‘scaled’,将值的范围缩放到当前颜色图的完整范围

    案例2:

    >> image(N,'CDataMapping','scaled')
    >> colorbar
    
    • 1
    • 2

    在这里插入图片描述

    注意!!!此时的效果与imagesc(N)画出的图一样。

    语法3:image(x,y,C) ,指定图像位置,与imagesc的用法一样,可参照下面的案例。
    语法4:显示三维真彩色数组的图像

    案例3:定义了一个三维图像,三维分别代表R、G、B,因此只定义第一维,图形就为红色。因为第一维的3x3矩阵数值不同,所以显示出的红色深浅不同。

    >> C = zeros(3,3,3);
    >> C(:,:,1) = [.1 .2 .3; .4 .5 .6; .7 .8 .9]  %定义三维图像的第一维,其他二维默认为0
    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
    >> image(C)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    2、imagesc函数

    显示

    语法1:imagesc(c),将数组 C 中的数据显示为一个图像,该图像使用颜色图中的全部颜色,即矩阵每个数值代表了一个颜色。

    案例1:用imagesc函数给N矩阵画图的结果如下:

    >> imagesc(N)
    
    • 1

    在这里插入图片描述

    语法2:imagesc(x,y,C) ,指定图像位置,其中(x,y)代表了加载进来的这幅图像x、y的范围。

    案例2:依然绘制N矩阵,但定义了图像的位置。注意x轴、y轴的变化。

    >> x=[3 9]>> y=[12 18];
    >> imagesc(x,y,N)
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    语法3:imagesc(C,clims),clims 指定映射到颜色图的第一个和最后一个元素的数据值。
    将 clims 指定为 [cmin cmax] 形式的二元素向量,其中小于或等于 cmin 的值映射到颜色图中的第一种颜色,大于或等于 cmax 的值映射到颜色图中的最后一种颜色。

    案例3:设置颜色显示的极大值和极小值分别为50和100,可以看出,图形像素颜色相对于前面两个案例,已经发生变化。

    >> clims=[50,100]
    >> imagesc(N,clims)
    
    • 1
    • 2

    在这里插入图片描述
    其他用法参照help文档,可调节透明度等。

    3、imshow函数

    可用来画tif格式的图像、二值图,功能强大,可更改显示图像的颜色。
    语法1:imshow(I), 在图窗中显示灰度图像 I,以原尺寸直接映射。
    案例1:

    imshow(N)
    
    • 1

    可以看出,原尺寸显示,图形非常小,只有中间一点白色区域。
    在这里插入图片描述

    语法2:imshow(I,[low high]) 显示灰度图像 I,以二元素向量 [low high] 形式指定显示范围。线性映射。
    案例2:

    imshow(N,[50 100])
    
    • 1

    可以看出,刚刚纯白色的方块里面有黑的、白的了
    在这里插入图片描述

    语法3:imshow(X,map) ,显示带有颜色图 map 的索引图像 X,比如tif影像,有R、G、B三个通道,可用该方式读取某一个通道的结果。

    区别总结:

    (1)image和imagesc函数显示图像是彩色的,imshow是灰度图像。
    (2)imshow将图像以原始尺寸显示,image和imagesc函数会适当进行缩放。
    (3)image采用的是直接映射,而imagesc采用线性映射。imagesc函数可以调整映射的范围,比如imagesc函数中的案例3,将映射范围改到了【50 100】。imshow函数既可以直接映射,也可以线性映射。

    以上理解需要先明白什么是索引图像,关于这3个函数的区别可以参考网页:
    https://wenku.baidu.com/view/5d0a7b61306c1eb91a37f111f18583d049640fcd.html

  • 相关阅读:
    利用梯度上升可视化卷积核:基于torch实现
    基于SpringBoot+vue+elementui在线教育系统详细设计实现
    手把手带你申请软著!助你提高通过率!!!
    【再探】设计模式—中介者模式、观察者模式及模板方法模式
    云原生存储解决方案
    一文详解 WebSocket 网络协议
    探索大型语言模型(LLM)在人类性格个性评估(MBTI)中的前景与应用
    免费分享一个springboot+vue学生选课管理系统,挺漂亮的
    如何解决DNS解析错误
    python 蓝桥杯之并查集
  • 原文地址:https://blog.csdn.net/qq_45241385/article/details/124900563