matlab axes中显示多张图像
imshow()
使用imshow(filename, ‘Parent’, ‘…’, ‘XData’, […, …], ‘YData’, […, …])函数。
详见imshow() 官方文档
参数解读
- ‘Parent’
图像对象的父级坐标区,值为句柄。 - ‘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) 的中心,并使后面的每个元素相隔一个单位。 - ‘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];