1

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

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

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

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

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

要比较的图表。

在此处输入图像描述

编辑

直接相关对我不起作用。

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

在此处输入图像描述

4

1 回答 1

3

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

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 距离。matlab central中提供一个脚本。我用这样的距离来比较字母的形状。在维基百科页面中,“应用程序”部分很重要(厚形状的边缘检测器,但它可能与您的特定问题无关)。

于 2013-07-18T10:25:22.833 回答