matlab axes中显示多张图像

本文介绍了如何在matlab的axes中利用imshow函数显示多张图像,详细解析了imshow的参数,包括'Parent', 'XData', 'YData',并提供了图像数据的解释和示例。讨论了当axes units为'normalized'时,如何调整'XData'和'YData'以保持图像插入不失真。" 122148291,10993839,甲流疫情死亡率分析,"['疾病研究', '数据分析', '编程竞赛', 'C语言', '蓝桥杯']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matlab axes中显示多张图像

imshow()

使用imshow(filename, ‘Parent’, ‘…’, ‘XData’, […, …], ‘YData’, […, …])函数。
详见imshow() 官方文档

参数解读

  1. ‘Parent’
    图像对象的父级坐标区,值为句柄。
  2. ‘YData’
    沿着 y 轴放置,以下列形式之一指定:
    a.二元素向量
    将第一个元素用作 C(1,1) 的中心位置(C指图像颜色数据),将第二个元素用作 C(m,n) 的中心位置,其中 [m,n] = size( C )。如果 C 为三维数组,则 m 和 n 为前两个维度。C 的其余元素的中心均匀分布在这两点之间。每个像素的高度由以下表达式确定:(y(2)-y(1))/(size(C,1)-1)如果 y(1) > y(2),则图像上下翻转。
    b.标量
    会以此位置作为 C(1,1) 的中心,并使后面的每个元素相隔一个单位。
  3. ‘XData’
    沿着 x 轴放置,以下列形式之一指定:
    a. 二元素向量
    将第一个元素用作 C(1,1) 的中心位置,将第二个元素用作 C(m,n) 的中心位置,其中 [m,n] = size( C )。如果 C 为三维数组,则 m 和 n 为前两个维度。C 的其余元素的中心均匀分布在这两点之间。每个像素的宽度由以下表达式确定:(x(2)-x(1))/(size(C,2)-1)如果 x(1) > x(2),则图像左右翻转。
    b. 标量
    会以此位置作为 C(1,1) 的中心,并使后面的每个元素相隔一个单位。

图像数据

  • 图像颜色数据C
    指定为下列形式之一:
    a. 向量或矩阵
    此格式定义索引图像数据。C 的每个元素定义图像的 1 个像素的颜色。例如,C = [1 2 3; 4 5 6; 7 8 9] 。C 的元素映射到相关联的坐标区的颜色图中的颜色。映射方法由image属性中的CDataMapping 属性控制。
    b. 由 RGB 三元组组成的三维数组
    此格式定义使用 RGB 三元值的真彩色图像数据。每个 RGB 三元组定义图像的 1 个像素的颜色。RGB 三元组是三元素向量,指定颜色的红、绿和蓝分量的强度。三维数组的第一页包含红色分量,第二页包含绿色分量,第三页包含蓝色分量。由于图像使用真彩色代替颜色图的颜色。如果 C 为 double 类型,则 RGB 三元值 [0 0 0] 和 [1 1 1] 分别对应于黑色和白色。如果 C 为整数类型,则该图像使用完整范围的数据确定颜色。例如,如果 C 为类型 uint8,则 [0 0 0] 和 [ 255 255 255 ] 分别对应于黑色和白色。如果 CData 为类型 int8,则 [-128 -128 -128] 和 [127 127 127] 分别对应于黑色和白色。如果 C 为类型 logical,则 [0 0 0] 和 [1 1 1] 分别对应于黑色和白色。
    image属性官方文档
  • 像素索引与空间位置的关系像素索引与空间位置的关系

示例

如图,将左边坐标系(axes1,units为pixels,像素为1602 * 1000)均分成 6 * 5 = 30 个区域,将右边坐标系(axes2,像素为267 * 200)中的图像插入到左边坐标系各个区域。
示例问题

fr=getframe(handles.axes2);
axes(handles.axes1);
hold on
for i=1:6
    for j=1:5
        imshow(fr.cdata,'Parent',handles.axes1,...
            'XData',[0.5+267*(i-1),267*i-0.5],...
            'YData',[0.5+200*(j-1),200*j-0.5]);
    end
end
hold off
handles.axes1.XLim=[0,1602];
handles.axes1.YLim=[0,1000];

示例效果图

  • 思考:如果示例中axes1的units是normalized,该怎么算’XData’和’YData’, 使axes2中图像插入到axes1各个区域内不失真?
    此时我将axes1,units改为’normalized’,'XLim’改为[0,6],'YLim’改为[0,5]
fr=getframe(handles.axes2);
axes(handles.axes1);
hold on
for i=1:6
    for j=1:5
        imshow(fr.cdata,'Parent',handles.axes1,...
            'XData',[1/(267*2)+1*(i-1),1*i-1/(267*2)],...
            'YData',[1/400+1*(j-1),1*j-1/400]);
    end
end
hold off
handles.axes1.XLim=[0,6];
handles.axes1.YLim=[0,5];

axes1中的图像与axes2中的图像相比发生失真

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值