我使用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个和平组成?谢谢你的帮助。
答案 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
参数取值subset
或1
以指示将绘制4个部分的子图。你可以这样使用它:
2
你投入的任何新图像都会简单地替换旧图像(仍然在同一图中):
img1=imread('coins.png');
seperate(img1,1);
img2=imread('peppers.png');
seperate(img2,2);