2017-08-15 127 views
-1

我想写一个MATLAB脚本给我一个等高线地图。等值线图必须从我从100个图像生成的输入中创建。MATLAB绘制来自不同地块的等高线图

故事是这样的:

我有,我跑了优化的图像处理算法100张图像。现在,我得到了他们的能量曲线。所以,我有100条能量曲线。我想创建一个等值线图,显示图上点的密度。 (能量曲线被绘制为能量相对于与固定次数的迭代迭代)

以下是我的变量:

energy(iteration,numImages) 

This is the image showing 100 energy curves plotted on the same figure

希望我解释很清楚。

在此先感谢。

+0

欢迎来到Stack Overflow。请你可以发表你已经尝试过的东西吗?这将让你得到更好的帮助! – JCooke

+0

我曾尝试为每个曲线都经过的每个点添加1。但是我无法获得该代码的工作,我无法将其转换为3D地图。 –

+0

你可以创建一种热图吗?例如'imagesc'。 – obchardon

回答

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。请注意,我使用了一个简单的计数器来确定方向上的间距。

以类似的方式,您可以使用轮廓进行绘图。该数据已经在为其生成循环对于我的代码,之后,删除/发表意见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函数。另一个额外循环的版本并不难。只记得每个点都有相同的规则网格,否则你会遇到麻烦。

+0

感谢您的回复。在我的情况下,x轴应该是“迭代次数”,y轴应该是“能量”,而z轴应该是包含从某些区域通过的线数的信息。它应该将线条的密度显示为轮廓。如果你根据这些新的信息可能会提出更多建议,我真的会对此有所顾虑。 –

+0

我编辑了这个问题。检查最后2个部分。不知道这是你在找什么。 – Guto

+0

https://stackoverflow.com/questions/9134014/contour-plot-coloured-by-clustering-of-points-matlab 这个链接实际上很好地描述了我的问题。在这个变量X和Y只是向量。我正在尝试修改这些代码以适应我的需要。也许如果你也可以看看这个,你可以给我另一个观点。 谢谢。 –

0

我解释你的问题,归结为如何根据在energy中找到的能量创建颜色的曲面图。我将通过使用contour函数和使用meshgrid生成的网格来解决此问题。如果每个图像在1000个数据点与100所描述文件的情节可以如下产生:

% 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一个三维表面曲线和相同的逻辑。

+0

感谢您的回复。在我的情况下,x轴应该是迭代次数,y轴应该是能量,而z轴应该是包含从某些区域通过的线数的信息。它应该将线条的密度显示为轮廓。我试过类似的东西给你的代码,并尝试添加1到每一行都经过而不是'东西',但我没有成功这样做。 –