MATLAB绘制不同图中的等高线图

问题描述 投票:-1回答:2

我正在尝试编写一个MATLAB脚本来给我一个等高线图。必须根据我从100张图像生成的输入创建等高线图。

故事是这样的:

我有100张图像,我运行了一个图像处理算法进行优化。现在,我得到了他们的能量曲线。所以,我有100条能量曲线。我想创建一个等高线图,它将显示我在图上更密集的点。 (能量曲线绘制为能量与迭代,具有固定的迭代次数)

以下是我的变量:

energy(iteration,numImages)

希望我解释得很好。

提前致谢。

matlab plot matlab-figure contour
2个回答
0
投票

我将你的问题解释为如何根据energy中发现的能量创建一个颜色的表面图。我会通过使用contour函数和使用meshgrid生成的网格来解决这个问题。如果每个图像在包含100个文件的1000个数据点中描述,则可以按如下方式生成图:

% using stuff as random junk instead of energy
numPoints = 1000;
numFiles = 100;
stuff = rand(1000,100); % replace with actual information
[X, Y] = meshgrid(1:numFiles, 1:numPoints);
contour(X,Y,stuff);

您还可以使用surf和相同的逻辑创建3D曲面图。


0
投票

从我所看到的图形(以及使用注释),一种可能的方法是使用plot3为每个绘图绘制3D线条。

为此,您可以使用以下代码:

x=(0:0.01:1)';

aexp=zeros(100,numel(x));
hold on
for ii=1:100;
%      aexp(ii,:)=exp((-x+ii/10)); %exponential
     aexp(ii,:)=exp(-(x-ii/100).^2); %~gaussian
%     aexp(ii,:)= x*ii; %linear increase 
    plot3(x,aexp(ii,:),ii*ones(1,numel(x)));
end
 % set(gca,'yscale','log'); % uncomment if you need logscale.

plot3 plot我有一些情节选择。它始终从XY视图绘制。我手动改变了,但你可以使用view command。请注意,我使用一个简单的计数器来使z方向的间距。

以类似的方式,您可以使用轮廓绘图。对于我的代码,在for循环中生成数据后,删除/注释plot3并添加:

contour(aexp) %outside the for loop, 

Contour plot

请注意,我并没有真正照顾我正在密谋的内容。您可以在Matlab page找到有关轮廓的更多信息。

您评论说,x轴应该是迭代次数,y轴应该是能量,z轴应该是包含从一些区域通过的线数的信息。为此,制作一个qq变量,就像它qq=number_of_lines(number of iterations,energy)。如果没有能量,请为能量制作一个离散网格。无论如何,迭代次数可能是离散的。功能就是你需要设计的功能,但我会选择检查每个能量和每次迭代的行数。在这种情况下,您将拥有依赖于y和x的z函数,即使用轮廓或曲面的情况。

我上面的函数为每个ii点创建一条线,具有3d函数。另一个额外循环的版本并不难。记住每个点都有相同的常规网格,否则你会遇到麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.