我正在尝试编写一个MATLAB脚本来给我一个等高线图。必须根据我从100张图像生成的输入创建等高线图。
故事是这样的:
我有100张图像,我运行了一个图像处理算法进行优化。现在,我得到了他们的能量曲线。所以,我有100条能量曲线。我想创建一个等高线图,它将显示我在图上更密集的点。 (能量曲线绘制为能量与迭代,具有固定的迭代次数)
以下是我的变量:
energy(iteration,numImages)
希望我解释得很好。
提前致谢。
我将你的问题解释为如何根据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曲面图。
从我所看到的图形(以及使用注释),一种可能的方法是使用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.
给我有一些情节选择。它始终从XY视图绘制。我手动改变了,但你可以使用view command。请注意,我使用一个简单的计数器来使z方向的间距。
以类似的方式,您可以使用轮廓绘图。对于我的代码,在for循环中生成数据后,删除/注释plot3并添加:
contour(aexp) %outside the for loop,
请注意,我并没有真正照顾我正在密谋的内容。您可以在Matlab page找到有关轮廓的更多信息。
您评论说,x轴应该是迭代次数,y轴应该是能量,z轴应该是包含从一些区域通过的线数的信息。为此,制作一个qq
变量,就像它qq=number_of_lines(number of iterations,energy)
。如果没有能量,请为能量制作一个离散网格。无论如何,迭代次数可能是离散的。功能就是你需要设计的功能,但我会选择检查每个能量和每次迭代的行数。在这种情况下,您将拥有依赖于y和x的z函数,即使用轮廓或曲面的情况。
我上面的函数为每个ii
点创建一条线,具有3d函数。另一个额外循环的版本并不难。记住每个点都有相同的常规网格,否则你会遇到麻烦。