1

问题

我正在尝试在 Matlab 中制作一个二维图形,它由多个图像和一个带有绘图数据的图形组成(我最终也可以将其转换为图像)。对于这些图像和图形,我需要能够指定它们在我的笛卡尔坐标系中的位置。

对于我的具体情况,能够“告诉”Matlab 图像的左下角在哪里就足够了。

在此处输入图像描述

所以对于上面的例子。我需要一些“技巧”让“bird1.jpg”从位置开始(a,b),“bird2.jpg”在位置开始(c,d),我的情节(e,f)在一个 Matlab 图中的位置。

问题的解决方案

感谢 chappjc,我能够找到解决问题的方法。这是我使用的代码,以便其他人将来也可以使用它。

figure_color = [.741 .717 .42];
axe_color = [1 1 1];
Screen.fig = figure('units','pixels',...
           'name','Parallel projection',...
           'menubar','none',...
           'numbertitle','off',...
           'position',[100 100 650 720],...
           'color',figure_color,...
           'busyaction','cancel',...
           'renderer','opengl');
Screen.axes = axes('units','pix',...
         'position',[420 460 200 200],... % (420,460) is the position of the first image
         'ycolor',axe_color,...
         'xcolor',axe_color,...
         'color',axe_color,...
         'xtick',[],'ytick',[],...
         'xlim',[-.1 7.1],...
         'ylim',[-.1 7.1],...
         'visible','On');
Screen.img = imshow(phantom);
Screen.axes2 = axes('units','pix',...
         'position',[0 0 200 200],... % (0,0) is the position of the second image
         'ycolor',axe_color,...
         'xcolor',axe_color,...
         'color',axe_color,...
         'xtick',[],'ytick',[],...
         'xlim',[-.1 7.1],...
         'ylim',[-.1 7.1],...
         'visible','On');
Screen.img2 = imshow(phantom);

基本上我所做的就是首先创建一个(大)图形,然后在这个大图的某个位置创建第一把斧头,并使其成为默认斧头。在这把斧头中,我显示了我的第一张图像(使用幻像功能制作)。之后,我在另一个位置制作了一个新斧头,并再次使其成为默认斧头。完成此操作后,我也将图像放在那里(相同的图片,但如果需要,您也可以使用另一张图片)。正如 chappjc 所描述的,您还可以使用更干净的方法句柄。

4

1 回答 1

0

在图中定位轴

一种方法是操纵Position图中多个轴的属性。在图中制作多个轴:

hf = figure;
ha0 = axes('parent',hf,'Position',[x0 y0 w0 h0]);
ha1 = axes('parent',hf,'Position',[x1 y1 w1 h1]);

然后通过指定句柄(即 ha0 或 ha1)将图像和绘图显示到轴中。例如:image(img0,'Parent',ha0)imshow(img1,'parent',ha1)

单张大图

另一种方法是制作单个大图像并简单地用image/ imshow/etc 显示它。

首先对于绘图,您可以使用getframe其次是frame2im获取矩阵格式的图像。

接下来,决定将什么放入组合图像并计算限制图像所需的最大框(使用它们的原点和大小找到最大的 x 和 y 坐标),其中可能包括原点。使用此信息制作空白图像(例如img = zeros(h,w,3)用于和 RGB 图像)。

于 2013-10-09T17:36:46.347 回答