在matlab中使用subplot命令绘制但功能不同

时间:2016-08-12 14:48:00

标签: matlab image-processing

我使用matlab函数。这个功能是使用相同图像的片段。但最后我没有结合这些作品。我只能展示不同的数字。我该如何重新加入这张图片? (我已经看过Mathematica使用的#As; ImageAssemble'命令,也许matlab有这样的功能。)如果没有一个功能,我认为这个和平可以在subplot命令下显示但问题是我必须打开子图在函数和每次调用函数时,不同的子图打开。我想只打开一个子图。例如,我有一个像下面这样的功能

function[] =seperate(I,n,m)
I1=I(1:m/2,1:n/2);
I2=I(1:m/2,n/2+1:n);
I3=I(m/2+1:m,1:n/2);
I4=I(m/2+1:m,n/2+1:n);
subplot(2,4,1)   %for eight image
imshow(I1);
subplot(2,4,2)
imshow(I2);
subplot(2,4,3)
imshow(I3);
subplot(2,4,4)
imshow(I4);
end

有一个实际的程序

img=imread('any_image.jpg');
gray=rgb2gray(img);
[n,m] = size(gray);
seperate(gray,n,m);
img_2=imread('any_image_2');
gray_2=rgb2gray(img_2);
[n1,m1]=size(gray_2)
seperate(gray_2,n1,m1);

你可以看到这个'分开'功能正在分离4个平等的和平形象。在两个不同的图像中使用此功能时,您有两个不同的子图。我想要一个子情节。例如,第一张图像和平应放置在子图(2,4,1),子图(2,4,2),子图(2,4,3),子图(2,4,4)和#39 ;和第二张图像和平应该放在子图(2,4,5),子图(2,4,6),子图(2,4,7),子图(2,4,8)' 。我怎样才能做到这一点?  我是否可以重新加入这些和平,我可以创造一个新的形象,作为一个和平,由前两个和平的8个和平组成?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您的问题很明确,初始代码中存在错误。但是,由于提供了代码,我运行它并设法理解问题:

您正在调用一个函数(具有一些图形输出)两次,但您希望图形以相同的 figure 输出(您使用单词{{ 1}}方式太多,有时不合适)。

确保函数始终绘制在同一图中的方法是:

  • 标识符附加到目标图(我使用了subplot 图的属性,但您可以使用其他属性(tag) 只要您可以分配唯一标识符)。
  • 当函数必须进行图形输出时,首先搜索是否 目标人物存在。您可以使用函数findobj。如果Name它会直接输出到它,如果是yes它 创造一个新的。

以下是对您的函数no的重写:

seperate.m

我冒昧地部分重构代码,以便能够使用循环(而不是一长串几乎重复的语句)。

使用此功能时,function seperate(I,subset) % default subset = 1 if nargin < 2 ; subset=1 ; end % first find if the target figure already exist hfig = findobj(0,'Type','figure','Tag','SeparatingFigure') ; if isempty(hfig) figure('Tag','SeparatingFigure') ; % create a new one else figure(hfig) ; % just make the existing figure active end % now split the image in 4 pieces [m,n] = size(I); Isplit{1} = I(1:m/2,1:n/2) ; Isplit{2} = I(1:m/2,n/2+1:n); Isplit{3} = I(m/2+1:m,1:n/2); Isplit{4} = I(m/2+1:m,n/2+1:n); % now display to the proper set of subplots % "subpos" store the index of the 4 subplot to use for 1 subset subpos = [1 2 5 6 ; ... %subset "1" will plot in subplot [1 2 5 6] 3 4 7 8] ; %subset "2" will plot in subplot [3 4 7 8] for k=1:4 subplot(2,4,subpos(subset,k)) imshow(Isplit{k}); end end 参数取值subset1以指示将绘制4个部分的子图。你可以这样使用它:

2

separated1

你投入的任何新图像都会简单地替换旧图像(仍然在同一图中):

img1=imread('coins.png');
seperate(img1,1);

img2=imread('peppers.png');
seperate(img2,2);

enter image description here