【问题标题】:Compare Plots in matlab比较matlab中的绘图
【发布时间】:2013-07-18 09:43:41
【问题描述】:

我在 matlab 中有两个绘图,其中我绘制了 x 和 y 坐标。如果我有这两个图,是否可以比较图是否匹配?我可以获取数字来判断它们的匹配程度吗?

请注意,图形可能在图中向右/向左/向上/向下移动(关闭轴不是问题)、缩放/旋转(我也想知道它是否倾斜,但现在是不是必须的)。

除了上面提到的基本属性之外,它不需要测试颜色元素、颜色反转和任何其他复杂的图形属性。

如果 matlab 还不够,我会欢迎其他工具。

请注意,我不能简单地取 x 和 y 值的绝对差。我可以获得 x 绝对差平均值和 y 绝对差,然后求平均值,但我需要一个组合误差。我需要比较图表。

要比较的图表。

编辑

直接相关对我不起作用。

对于一组不同的数据:我得到了 0.94 的相关性。对于给定的数据,这是非常高的。注意到一个数据的波动比其他数据少且快。

【问题讨论】:

  • 你能发布示例图吗?
  • 这需要一段时间。但我会尝试发布一个。
  • 预期输出,您认为示例图的输出应该是什么?
  • 对数据本身进行关联可能比先绘制更简单?
  • 正如@RogerRowland 所说,您所做的听起来像是在计算相关系数 - 在两个 y 向量上使用 Matlab 函数 corrcoef 将为您提供介于 -1 和 1 之间的适当输出。0 表示完全没有关系,1 表示完全对应,-1 表示完全相反的对应。如果您的向量长度不同,您可能需要查看xcorr 函数。

标签: image-processing graph matlab


【解决方案1】:

您可以使用此代码访问绘制的数据

x = 10:100;  
y = log10(x);  
plot(x,y);  

h = gcf;  
axesObjs = get(h, 'Children'); %axes handles  
dataObjs = get(axesObjs, 'Children'); %handles to low-level graphics objects in axes  
objTypes = get(dataObjs, 'Type'); %type of low-level graphics object  
xdata = get(dataObjs, 'XData'); %data from low-level grahics objects  
ydata = get(dataObjs, 'YData');  

然后您可以在 xdata 和 ydata 之间进行关联,例如,或任何类型的比较。系数 R 表示匹配百分比。

[R,P] = corrcoef(xdata, ydata);

您还会有兴趣比较图形当前坐标区中的坐标区限制。例如

R = ( diff(get(h_ax1,'XLim')) / diff(get(h_ax2,'XLim')) ) + ...
( diff(get(h_ax1,'YLim')) / diff(get(h_ax2,'YLim')) )

其中 h_ax1 是第一个 ax 的句柄,h_ax2 是第二个 ax 的句柄。在这里,您将比较 (XLim + YLim) 的值。不过,与不同 gca 属性的可能比较确实非常广泛。

编辑

要比较两组点,您可以使用分析关系以外的其他指标。我想到了距离或收敛,例如Hausdorff distance。在 matlab 中心有一个脚本here。我用这样的距离来比较字母的形状。在维基百科页面中,“应用程序”部分很重要(厚形状的边缘检测器,但它可能与您的特定问题无关)。

【讨论】:

  • 我已经编辑了我的答案,以包括可能更适合您的问题的整体形状距离。
  • 这听起来更好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
相关资源
最近更新 更多