1

我正在为我的特定问题寻求帮助。

我有一个从 XYZ 数据创建的等高线图。该图包含 2 个宽峰,其中一个比另一个更强烈。

当最强峰与 Y 轴对齐时,我可以在每个 X 值处对每个 YZ 曲线进行拟合。我通常做一个高斯拟合来在同一张图上绘制峰值中心。

在某些情况下,我需要执行相同的拟合,但不需要沿 Y 轴方向(在这种情况下,我只是在每个不同的 X 值处绘制 YZ 扫描),而是沿另一个任意方向。

目前我发现的唯一方法如下: - 绘制等高线图并找到最强烈峰的位置 - 如果该位置未与 Y 轴对齐,则旋转所有数据并再次绘制等高线 -对每个 X 值执行 YZ 高斯拟合 - 旋转生成的 XY 位置以返回原始图 - 将 XY 位置绘制为原始等高线图上的一条线

这很长,需要大量内存。我想知道是否有更优雅/更快的方式。

谢谢你的帮助

大卫

4

1 回答 1

0

我认为您想沿任意线从 (x,y,z) 数据中提取数据以进行拟合。等高线图将仅显示部分数据,z(x,y)可以显示完整数据imagesc等。假设您想要沿由两个点定义的线的数据(x1,y1) -> (x2,y2)。根据直线的 eq,直线y=a*x+b的斜率a(y2-y1)/(x2-x1)b=y1-a*x1。例如,我将在以下轮廓中选择 (x,y) 坐标:

创建数据和端点:

m=peaks(100);
x1=11 ; x2=97;
y1=66; y2=40;

因此行参数为:

a=(y2-y1)/(x2-x1);
b=y1-a*x1;

这条线是:

x=x1:x2;
y=round(a*x+b);

使用线性索引选择正确的 (x,y) 元素:

ind=sub2ind(size(m),y,x)

阴谋:

subplot(2,1,1)
contour(m,10); hold on
line([x1 x2],[y1 y2],'Color',[1 0 0]);

subplot(2,1,2)
plot(m(ind))

在此处输入图像描述

您现在可以使用vec=m(ind)来适应您的功能。

于 2013-03-19T05:18:31.280 回答